一、通过url后面跟参数版本,例如:xxx.com?version=v1
,兼容项目,一般不建议这么使用。
二、通过配置子域名或模块方式,例如:v1.xxx.com
、v2.xxx.com
两个子域名来分别对应项目的两个模块,或者xxx.com/v1
、xxx.com/v2
三、对于API应用,单模块
+多级控制器
实现
image.png
创建版本控制器:php think make:controller v1/Index
请求时候url地址上要跟上版本号,例如:xxx.com/api/v1/index
.路由api.php
配置如下:
#路由配置
use think\facade\Route;
Route::group(':version',function(){
Route::group('index', function () {
Route::get('','api/:version.Index/test');
Route::get('agreement/:id','api/:version.Index/test1')->pattern(['id' => '\d+']);
Route::get('logout', 'api/:version.Index/test2')->middleware('ApiJwt');
});
})->allowCrossDomain();
四、通过header头信息传递版本号。优点是版本更迭不需改变url地址,直接改变请求头信息
接口请求地址:xxx.com/api/index
,版本通过header中的api-version
参数传递,默认v1
版本!
use think\facade\Route;
use think\facade\Request;
$version = Request::header('api-version','v1');#接口版本
Route::group('', function()use($version){
//测试
Route::group('index', function () use($version){
Route::get('',"api/{$version}.Index/index");
Route::get('test',"{$version}.Index/test");
});
})->allowCrossDomain();
五、通过Accept
头信息处理,优点是可以设置接口输出格式。这种没使用过,待实现...
GET xxx.com/user/1
Accept: application/vnd.tp6.v1+json
网友评论