Структура папок управления версиями Laravel API

Я новичок в версии 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) как насчет структуры папок для моделей и событий, я должен сделать модель для каждой версии?

3

Решение

Ваш подход верен для управления версиями 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');
});

Если вы не хотите управлять им самостоятельно, вы также можете использовать библиотеку API, которая поддерживает управление версиями. Я успешно использовал Динго много раз, но, вероятно, есть еще несколько доступных.

Я не думаю, что вы должны версии моделей. Они должны представлять вашу текущую структуру базы данных и, следовательно, быть уникальными. Если вам нужно внести некоторые изменения, попробуйте сделать его обратно совместимым с версиями API, которые вы все еще поддерживаете.

Та же история для событий, если они не сильно связаны с вашим API. В этом случае я считаю, что лучшая структура папок должна быть эквивалентна структуре контроллеров:

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

Другие решения

Других решений пока нет …