laravel - 在 Laravel 中管理多个 API 版本
问题描述
我正在使用一个基本 URL(例如https://api.domain.com)公开 API 并让该 URL 处理 API 的所有版本(API 使用者需要发送Accept-Version
请求标头以指示哪个版本他们尝试使用的 API)。
我将如何在 Laravel 中管理这种方法?
我在想我可以将我所有的控制器、助手、模型、路由、配置等放在一个1.0.0
文件夹中,并将它们用于我的 API 版本 1。当我发布一个新版本时,我可能会复制原始代码,将它们放在一个1.1.0
文件夹中,然后在那里进行更改。
如果我要使用这种文件夹方法,我需要在路由中做什么来指示要使用哪个文件夹?我的控制器如何知道要使用哪些模型、助手、配置等?感觉这种方法可能会变得非常混乱和令人费解。
解决方案
您可以在您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
推荐阅读
- .net - 如何在 Visual Studio 2019 中将 .NET Framework 4.7.2 项目迁移到 .NET Core 3.0
- python - Python Pandas:输出到excel“.xls”电子表格,只需覆盖选定的工作表
- three.js - 纹理几何在照明更新时丢失图像
- python - Python/Pydantic - 使用带有 json 对象的列表
- intellij-idea - 有没有办法以独立于大小写(然而,各自)的方式选择和编辑下一个事件?
- java - 如何在java中的变量中使用大数进行算术运算而不会出现异常
- r - R cron 脚本不会自动刷新 httr-oauth 令牌
- reactjs - 为什么 React 组件不是每次都重新渲染?
- jquery - 有没有办法在外部点击时关闭 UIkit 切换?
- javascript - 在不同的域中设置 localStorage