Laravel 流明版本控制
Laravel Lumen Versioning
我们有一个 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 添加新功能 仅(其他控制器和路由没有更新)所以我的问题这是如何在这种情况下创建 API 的 V2?
我们是否必须重新创建所有未受影响的其他 11 个控制器并将 70 条路由添加到 V2 前缀下的 web.php?还是我遗漏了一些东西感谢您的帮助
通常,方法是没有 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 的路由的代码重复。我们的想法是这最终会发生。
我们有一个 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 添加新功能 仅(其他控制器和路由没有更新)所以我的问题这是如何在这种情况下创建 API 的 V2?
我们是否必须重新创建所有未受影响的其他 11 个控制器并将 70 条路由添加到 V2 前缀下的 web.php?还是我遗漏了一些东西感谢您的帮助
通常,方法是没有 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 的路由的代码重复。我们的想法是这最终会发生。