Laravel API 版本控制文件夹结构
Laravel API versioning folders structure
我是 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)模型和事件的文件夹结构如何,我应该为每个版本制作模型吗?
您的方法对于 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
我是 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)模型和事件的文件夹结构如何,我应该为每个版本制作模型吗?
您的方法对于 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