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 流明版本控制的主要内容,如果未能解决你的问题,请参考以下文章

Laravel/流明 api 过滤器

使用Laravel的语义版本控制进行包版本控制

LUMEN:如何修复 SQLSTATE [42000]:语法错误或访问冲突:laravel 流明上的 1071

Laravel RESTful API 版本控制设计

带有 Laravel Sail 和版本控制的 Laravel 8 开发项目

是否有仅适用于控制台应用程序的 laravel 版本? [关闭]