Laravel Lumen Versioning



我们有一个移动应用程序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','ApiV1UserController@SignIn');
$router->post('Verify','ApiV1UserController@Verify');
..... other routes

});

8个月后,我们现在需要更改一些函数响应,并将新函数添加到UserController.php中(其他控制器和路由没有更新(,所以我的问题是如何在这种情况下创建API的V2?

我们是否必须重新创建所有未受影响的其他11个控制器,并在V2前缀下将70条路由添加到web.php?还是我错过了什么感谢你的帮助

通常情况下,方法是没有v2可用于尚未处于v2中的路由,因此您可以这样做:

$router->group(['prefix' => 'Api/V1'], function () use ($router) {
$router->post('SignIn','ApiV1UserController@SignIn');
$router->post('Verify','ApiV1UserController@Verify');
..... other routes

});
$router->group(['prefix' => 'Api/V2'], function () use ($router) {
$router->post('SignIn','ApiV1UserController@SignIn');
$router->post('Verify','ApiV1UserController@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' => 'AppHttpControllersApiV1' ], function () use ($router) {
$allRoutes($router);
});
$router->group([ 'prefix' => 'Api/V2', 'namespace' => 'AppHttpControllersApiV2' ], function () use ($router) {
$allRoutes($router);
});

这将复制v1和v2中的所有路由。

然而,这确实意味着尚未迁移到v2的路由的代码重复。我们的想法是,这最终会发生。

最新更新