我正在使用一个基本URL(例如https://api.domain.com)公开API,并让该URL处理API的所有版本(API使用者需要在请求标头中发送Accept-Version
指出他们要使用的API版本。
我将如何在Laravel中管理这种方法?
我当时想我可以将所有控制器,助手,模型,路由,配置等放在1.0.0
文件夹中,并将其用于我的API版本1。发布新版本时,也许我会复制原始代码,将它们放在1.1.0
文件夹中,然后在其中进行更改。
如果我要使用这种文件夹方法,那么在路由中需要做什么以指示要使用哪个文件夹?我的控制器将如何知道要使用什么模型,助手,配置等?这样的感觉可能会变得非常混乱和混乱。
答案 0 :(得分:1)
您可以在RouteServiceProvider.php
中定义应用程序的路由。在这里,您还可以为路由定义名称空间,名称前缀和中间件。只需为您的api的每个版本添加一个新的路线图。让中间件检查版本,必要时进行重定向,并将名称前缀/命名空间设置为正确的版本目录。
RouteServiceProvider
类似于:
protected function mapApi-1-0-0-Routes()
{
Route::middleware(['api', 'version'])
->name('1.0.0.')
->namespace('1.0.0')
->group(base_path('routes/api.php'));
}
然后您的middleware
看起来像
public function handle($request, Closure $next)
{
switch ($request->version) {
case "1.0.0":
$route = $request->version.$request->route()->getName();
break;
// more versions
return redirect()->route($route)->with($request);
}
我还没有测试过
路由组名称前缀: https://laravel.com/docs/7.x/routing#route-group-name-prefixes
路由名称空间: https://laravel.com/docs/7.x/routing#route-group-namespaces
重定向命名路由: https://laravel.com/docs/7.x/redirects#redirecting-named-routes
全球中间件: https://laravel.com/docs/7.x/middleware#global-middleware
写作服务提供商: https://laravel.com/docs/7.x/providers#writing-service-providers