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 的路由的代码重复。我们的想法是这最终会发生。