Laravel 流明版本控制
Posted
技术标签:
【中文标题】Laravel 流明版本控制【英文标题】:Laravel Lumen Versioning 【发布时间】:2021-09-01 11:21:49 【问题描述】:我们有一个 Mobile App Rest API,它有 70 多个路由和 12 个控制器和文件夹结构看起来像,
/app
/Http
/Controllers
/Api
/v1
/UserController.php
/...other 11 controllers
/v2
还有路线:
$router->group(['prefix' => 'Api/V1'], function () use ($router)
$router->post('SignIn','Api\V1\UserController@SignIn');
$router->post('Verify','Api\V1\UserController@Verify');
..... other routes
);
8 个月后,我们现在需要更改一些函数响应并将新函数添加到 UserController.php only(其他控制器和路由没有更新)所以我的问题是如何创建 V2在这种情况下的 API?
我们是否必须重新创建所有未受影响的其他 11 个控制器并将 70 条路由添加到 web.php 下的 V2 前缀?还是我在这里遗漏了什么感谢您的帮助
【问题讨论】:
【参考方案1】:通常该方法是没有 v2 可用于尚未在 v2 中的路线,所以你会这样做:
$router->group(['prefix' => 'Api/V1'], function () use ($router)
$router->post('SignIn','Api\V1\UserController@SignIn');
$router->post('Verify','Api\V1\UserController@Verify');
..... other routes
);
$router->group(['prefix' => 'Api/V2'], function () use ($router)
$router->post('SignIn','Api\V1\UserController@SignIn');
$router->post('Verify','Api\V1\UserController@Verify');
// And that's it
);
以下是我会为版本管理做的事情:
假设您到达 Api/V1 到 Api/V2 中都存在控制器的地步,那么您可以这样做:
$allRoutes = function ($router)
$router->post('SignIn','UserController@SignIn');
$router->post('Verify','UserController@Verify');
// all other routes.
请注意,这里根本没有 api/v1 或 v2。然后,您可以将路线定义为:
$router->group([ 'prefix' => 'Api/V1', 'namespace' => 'App\Http\Controllers\Api\V1' ], function () use ($router)
$allRoutes($router);
);
$router->group([ 'prefix' => 'Api/V2', 'namespace' => 'App\Http\Controllers\Api\V2' ], function () use ($router)
$allRoutes($router);
);
这应该复制 v1 和 v2 中的所有路由。
但是,这确实意味着尚未迁移到 v2 的路由的代码重复。我们的想法是这最终会发生。
【讨论】:
感谢您的回答,我认为这是需要主要版本控制之前的最佳解决方案以上是关于Laravel 流明版本控制的主要内容,如果未能解决你的问题,请参考以下文章
LUMEN:如何修复 SQLSTATE [42000]:语法错误或访问冲突:laravel 流明上的 1071