【问题标题】:Laravel API versioning folders structureLaravel API 版本控制文件夹结构
【发布时间】:2019-01-15 07:43:24
【问题描述】:

我是 api 版本控制的新手,所以我的问题是:

1)这个文件夹结构是真的吗?

/app
  /controllers
    /Api
      /v1
        /UserController.php
      /v2
        /UserController.php

路线:

Route::group(['prefix' => 'v1'], function () {
  Route::get('user',      'Api\v1\UserController@index');
  Route::get('user/{id}', 'Api\v1\UserController@show');
});

Route::group(['prefix' => 'v2'], function () {
  Route::get('user',      'Api\v2\UserController@index');
  Route::get('user/{id}', 'Api\v2\UserController@show');
});

2)models 和 events 的文件夹结构如何,我应该为每个版本制作模型吗?

【问题讨论】:

  • 当你在 laravel 中开发 Api 时。如果你输入localhost/api/user,你的 api url 已经可以访问了。所以你的前缀应该在 v1 上,所以它看起来像localhost/api/v1/user。在您定义的路线中,它将是localhost/api/api/v1/user。所以你应该将你的路由前缀更改为 v1 v2 只从你的前缀中删除 api 它已经是默认的了。
  • 我编辑了谢谢,@SalmanZafar

标签: php laravel api api-versioning


【解决方案1】:

您的方法对于 API 版本控制是正确的。为避免在每个控制器路径之前重复 Api\vN\ 前缀,您还可以这样做:

Route::group(['prefix' => 'api/v1', 'namespace' => 'Api\v1'], function () {
  Route::get('user',      'UserController@index');
  Route::get('user/{id}', 'UserController@show');
});

Route::group(['prefix' => 'api/v2', 'namespace' => 'Api\v2'], function () {
  Route::get('user',      'UserController@index');
  Route::get('user/{id}', 'UserController@show');
});

也不要忘记更改控制器的命名空间。例如:

namespace App\Http\Controllers\v1;

如果您不想自己管理它,也可以使用一些支持版本控制的 API 库。我多次成功使用Dingo,但可能还有更多可用的。

我认为您不应该对模型进行版本化。它们应该代表您当前的数据库结构,因此是唯一的。如果您需要进行一些更改,请尝试使其与您仍在维护的 API 版本向后兼容。

事件的情况相同,除非它们与您的 API 紧密耦合。在这种情况下,我认为最好的文件夹结构应该等同于控制器:

/app
  /Events
    /Api
      /v1
        /ApiEvent.php
      /v2
        /ApiEvent.php
    GenericEvent.php

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    • 2018-07-20
    • 2013-12-09
    • 1970-01-01
    • 2011-10-19
    • 2014-02-18
    • 1970-01-01
    相关资源
    最近更新 更多