thinkphp5 RESTful api开发版本控制,thinkphp官方文档不是很详细,我根据个人经验分享下。 我们以一个用户信息读取的接口为例,包含两个版本V1 和V2 ,v2 版本的接口包括用户的档案信息,统一使用json 格式数据输出到客户端。 在application 目录下面创建api 模块目录,并创建controller 和model 子目录,因为api 接口无需视图,所以不需要创建view 目录。 api 版本号可以在请求头、参数、URL路由参数中传入,以下是tp5.X中使用方法。
第一种:URL路由传入方式(推荐) 在route.php路由文件中配置,如下
'api/:version/:controller'=>'api/:version.:controller/index', 'api/:version/:controller/:function'=>'api/:version.:controller/:function'
不同版本的URL访问地址为:
版本号中不能包含. 符号。
第二种:请求头传入方式 在route.php路由文件中配置,如下 $v = request()->header('version'); 'api/:controller$'=>['api/'.$v.'.:controller/index',['method' => 'get']], 'api/:controller/:function$'=>'api/'.$v.'.:controller/:function', 'api/house'=>['api/'.$v.'.house',['only'=>['index','read','update','delete']]], 'api/book'=>['api/'.$v.'.book',['only'=>['index','read','save','delete']]], 'api/book_rent'=>['api/'.$v.'.book_rent',['only'=>['index','read','save']]],
第三种:请求参数传入方式
和请求头方式类似,这里不再累述。
控制器实现 v1 版本控制器(类文件位置为application/api/controller/v1/User.php )代码如下:
namespace app\api\controller\v1; use app\api\model\User as UserModel; public function read($id = 0) $user = UserModel::get($id); return json(['error' => '用户不存在'], 404);
v2 版本的控制器(类文件位置为application/api/controller/v2/User.php )代码如下:
namespace app\api\controller\v2; use app\api\model\User as UserModel; public function read($id = 0) $user = UserModel::get($id, 'profile'); return json(['error' => '用户不存在'], 404);
|