larvel 中的api.php_php – laravel中的Api版本控制:路由取决于“接受”标题

这篇博客讨论了在Laravel中如何实现API版本控制,通过创建一个中间件来解析请求头中的'api-version',并根据该版本动态调整路由到对应的控制器。文章提到了对RouteServiceProvider的修改,以及对routes.php文件的组织方式。作者希望避免在主路由文件中对路由进行分组,并提出了使用switch语句根据版本包括不同的路由文件。更新部分推荐使用dingo/api包来更有效地管理多版本API。
摘要由CSDN通过智能技术生成

由于我想在接受标头上触发端点,因此我创建了一个中间件来识别使用客户端的版本:

// ApiVersionMiddleware

public function handle($request, Closure $next)

{

$route = $request->route();

$actions = $route->getAction();

$actions['uses'] = str_replace(

'{api}',

$request->header('api-version'),

$actions['uses']

);

$route->setAction($actions);

return $next($request);

}

然后我更改了默认的RouteServiceProvider命名空间:

class RouteServiceProvider extends ServiceProvider {

// protected $namespace = 'App\Http\Controllers'; // default value

protected $namespace = null;

.

.

}

最后,在我的routes.php文件中,我有:

Route::group(['middleware' => 'api-version'], function()

{

Route::resource('items', 'App\Http\Controllers\{api}\ItemsController', ['only' => ['show', 'index', 'store', 'destroy']]);

});

我试图在HttpKernel类中注册中间件而不是分组路由定义,但它不起作用.

我想知道是否有更好的方法来实现API版本控制.

>我想为每个版本都有一个routes.php文件:v1-routes.php,v2-routes.php等等.

>我不喜欢在routes.php中对路由定义进行分组的想法,只是为了访问{api}值.有没有其他方法可以找出我应该触发哪个控制器?

谢谢.

解决方法:

我想你可以在你的routes.php上尝试这样的东西我还没有测试但应该工作

switch (Request::header('api-version')) {

case 'v2':

include_once('routes_v2.php');

break;

default:

include_once('routes_v1.php');

}

并且在route_v …. php文件中定义路由,就像你正常做的那样.

UPDATE

执行此操作的正确方法是在RouteServiceProvider的map函数中.您将只有两个路径文件.

您可以在dingo / api包中轻松管理多个版本的api.它将为您节省大量时间.

标签:php,rest,versioning,routing,laravel-5

来源: https://codeday.me/bug/20190519/1138048.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值