分享

thinkphp5 进行版本控制

 丶平上 2018-08-08

thinkphp5 RESTful api开发版本控制,thinkphp官方文档不是很详细,我根据个人经验分享下。

我们以一个用户信息读取的接口为例,包含两个版本V1V2v2版本的接口包括用户的档案信息,统一使用json格式数据输出到客户端。

application目录下面创建api模块目录,并创建controllermodel子目录,因为api接口无需视图,所以不需要创建view目录。

api版本号可以在请求头参数URL路由参数中传入,以下是tp5.X中使用方法。


第一种:URL路由传入方式(推荐)

 在route.php路由文件中配置,如下

  1. return [
  2. // api版本路由
  3. 'api/:version/:controller'=>'api/:version.:controller/index',// 省略方法名时
  4. 'api/:version/:controller/:function'=>'api/:version.:controller/:function'// 有方法名时
  5. ];

不同版本的URL访问地址为:

  1. http://tp5.com/api/v1/user/10
  2. http://tp5.com/api/v2/user/10

版本号中不能包含.符号。


第二种:请求头传入方式

 在route.php路由文件中配置,如下

  1. $v = request()->header('version');
  2. if($v==null) $v = "v1";
  3. return [
  4. //api版本控制
  5. 'api/:controller$'=>['api/'.$v.'.:controller/index',['method' => 'get']],
  6. 'api/:controller/:function$'=>'api/'.$v.'.:controller/:function',
  7. //资源路由
  8. '__rest__'=>[
  9. //api
  10. 'api/house'=>['api/'.$v.'.house',['only'=>['index','read','update','delete']]],
  11. 'api/book'=>['api/'.$v.'.book',['only'=>['index','read','save','delete']]],
  12. 'api/book_rent'=>['api/'.$v.'.book_rent',['only'=>['index','read','save']]],
  13. ]
  14. ]


第三种:请求参数传入方式

和请求头方式类似,这里不再累述。


控制器实现

v1版本控制器(类文件位置为application/api/controller/v1/User.php)代码如下:

  1. namespace app\api\controller\v1;
  2. use app\api\model\User as UserModel;
  3. class User
  4. {
  5. // 获取用户信息
  6. public function read($id = 0)
  7. {
  8. $user = UserModel::get($id);
  9. if ($user) {
  10. return json($user);
  11. } else {
  12. return json(['error' => '用户不存在'], 404);
  13. }
  14. }
  15. }

v2版本的控制器(类文件位置为application/api/controller/v2/User.php)代码如下:

  1. namespace app\api\controller\v2;
  2. use app\api\model\User as UserModel;
  3. class User
  4. {
  5. // 获取用户信息
  6. public function read($id = 0)
  7. {
  8. $user = UserModel::get($id, 'profile');
  9. if ($user) {
  10. return json($user);
  11. } else {
  12. return json(['error' => '用户不存在'], 404);
  13. }
  14. }

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多