【问题标题】:Laravel Lumen VersioningLaravel 流明版本控制
【发布时间】: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 前缀?还是我在这里遗漏了什么感谢您的帮助

【问题讨论】:

    标签: php laravel lumen rest


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

    【讨论】:

    • 感谢您的回答,我认为这是需要主要版本控制之前的最佳解决方案
    猜你喜欢
    • 1970-01-01
    • 2018-08-08
    • 2018-07-20
    • 2016-10-05
    • 1970-01-01
    • 2022-07-27
    • 2023-03-24
    • 2010-10-01
    • 2017-03-18
    相关资源
    最近更新 更多