素材牛VIP会员
如何给API接口的URL上增加版本号?
 de***oo  分类:ThinkPHP  人气:1366  回帖:6  发布于6年前 收藏

背景故事

系统环境

  • Nginx

  • PHP5.3.28

  • Onethink、Thinkphp3.2.3

项目是由第三方开发的, 也没有规范的文档, 现在由于APP升级旧版的APP也要保留使用.

目前结构目录

现状

api.xxx.com api1.xxx.com 由二级域名对应每个版本 ps: 项目直接复制 ~

这样可以分出来,但每发一个版本就要增加一个二级域名. 再说域名运营对二级域名有限制.

初想

服务目录结构

wwwroot
 api.xxx.com
    v1  
        项目版本1
    v2 
        项目版本2

api.xxx.com/v1/Home/Order/create 指向到目录v1中

api.xxx.com/v2/Home/Order/create 指向到目录v2中

问: 如何配置可以达到上面效果呢?

 标签:nginxthinkphpphp

讨论这个帖子(6)垃圾回帖将一律封号处理……

Lv4 码徒
青***e Linux系统工程师 6年前#1

tp3.2的话没有显式路由,你直接可以看下他的路由解析规则稍微修改下就行了,应该也不难

Lv3 码奴
随***火 站长 6年前#2

域名不行的话,在v1基础上做个v2子项目?还是就是单独的v2项目?

Lv4 码徒
进***新 学生 6年前#3

通过修改nginx配置, 达到预期效果. ^_^

location /v1/ {

    if (!-e $request_filename) {
        rewrite ^/v1/(.*)$ /v1/index.php?s=$1 last;
        break;
    }

}
location /v2/ {

    if (!-e $request_filename) {
        rewrite ^/v2/(.*)$ /v1/index.php?s=$1 last;
        break;
    }

}

thinkphp3.2.3路由, 在这评论里找到答案, Ctrl+F 搜索修改nginx配置

Lv3 码奴
wu***su 移动开发工程师 6年前#4

使用Webserver的URL重写实现

Lv3 码奴
路***6 Web前端工程师 6年前#5

配置nginx

server {
    listen 80;
    server_name api.xxx.com;
    location /v1/ {
        proxy_pass http://127.0.0.1:8001/;
        proxy_redirect http://127.0.0.1:8001/   /v1/;
        proxy_set_header Host $host;
    }
    location /v2/ {
        proxy_pass http://127.0.0.1:8002/;
        proxy_redirect http://127.0.0.1:8002/   /v2/;
        proxy_set_header Host $host;
    }
}

server {
    listen 8001;
    allow 127.0.0.1;  # 仅允许本地访问8001端口(如有必要)
    deney all;
    server_name api.xxx.com;
    root api.xxx.com/v1/;
    # php 相关的fastcgi配置
}

server {
    listen 8002;
    allow 127.0.0.1;  # 仅允许本地访问8001端口(如有必要)
    deney all;
    server_name api.xxx.com;
    root api.xxx.com/v2/;
    # php 相关的fastcgi配置
}
Lv6 码匠
坐***来 技术总监 6年前#6

使用动态路由,api.xxx.com/{version}/Home/Order/create,里面的version做动态路由设置,数据调用方就可以根据需求自行访问具体接口

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取