• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

详解Laravel5.6通过路由进行API版本控制的简单方法

php 搞代码 4年前 (2022-01-01) 23次浏览 已收录 0个评论

这篇文章主要介绍了详解Laravel5.6通过路由进行API版本控制的简单方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

Laravel版本:5.6

API随着迭代,新版本往往需要继承老版本的功能,并对原有的功能修改和扩展,这时为了兼容各个版本的接口,就需要进行版本控制。

请求版本区分:

在请求的header中附带版本信息,如app-version:1.0.1

laravel这边的获取方法:

 Request::header('app-version'); 

文件路径:

1.0.1版本的UserController,文件路径就是
app/Http/Controllers/Api/v1d0d1/UserController.php

1.0.2版本,就是
app/Http/Controllers/Api/v1d0d2/UserController.php

注意1.0.2版本如果需要使用1.0.1原有的功能,需要继承原有的类

 use App\Http\Controllers\Api\UserController as UserCtrl; class UserController extends UserCtrl { ... } 

版本控制

版本解析方法:

 function getRouteContoller($controllerName) { $base_path = 'App\Http\Controllers\Api\\'; //无版本 $app_version = Request::header('app-version'); if (!$app_version) return $controllerName; //当前版本 $version_path = 'v' . str_replace('.', 'd', $app_version) . '\\'; $controllerPath = $base_path . $version_path . $controllerName; if (class_exists($controllerPath)) { return $version_path . $controllerName; } //往期版本 $versionNumbers = intval(str_replace('.', '', $app_version)); for ($i = $versionNumbers - 1; $i > 0; $i--) { $version_path = 'v' . implode('d', str_split($i)) . '\\'; $controllerPath = $base_path . $version_path . $controllerName; if (class_exists($controllerPath)) { return $version_path . $controllerName; } } return $controllerName; } 

注:该方法会将1.0.2版本解析为v1d0d2,并判断对应类是否存在,如果存来源gao($daima.com搞@代@#码网在则直接返回类的路径;不存在则向下寻找1.0.1版本类是否存在,直到找到存在的类返回。

路由文件

 Route::post('login', getRouteContoller('UserController').'login'); 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持gaodaima搞代码网

以上就是详解Laravel5.6通过路由进行API版本控制的简单方法的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:详解Laravel5.6通过路由进行API版本控制的简单方法

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址