如何给API接口的URL上增加版本号?

背景故事

系统环境

  • 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中

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

阅读 8k
6 个回答

通过修改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配置

配置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配置
}

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

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

使用Webserver的URL重写实现

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题