Я новичок в Laravel (4 и 5), а недавно я работаю над RESTful API. Чтобы разрешить несколько версий API, я использую URL для определения версии.
Я прочитал этот пост и кажется, что большинство людей следуют этому подходу: Как организовать различные версии REST API-контроллеров в Laravel 4?
Структуры папок:
/app /controllers /Api /v1 /UserController.php /v2 /UserController.php
И в файлах UserController.php я задал пространство имен соответственно:
namespace Api\v1;
или
namespace Api\v2;
и в маршрутах:
Route::group(['prefix' => 'api/v1'], function () { Route::get('user', 'Api\v1\UserController@index'); Route::get('user/{id}', 'Api\v1\UserController@show'); }); Route::group(['prefix' => 'api/v2'], function () { Route::get('user', 'Api\v2\UserController@index'); Route::get('user/{id}', 'Api\v2\UserController@show'); });
URL будет простым http: //…./api/v1 для версии 1 и http: //…./api/v2 для версии. Это прямолинейно.
Мои вопросы: Что делать, если я создаю небольшое обновление api, скажем v1.1, как мне организовать структуру папок? Я думал, что это так, и должно быть все равно, как точка является действительным именем папок?
/app /controllers /Api /v1 /UserController.php /v1.1 /UserController.php /v1.2 /UserController.php /v2 /UserController.php
Кроме того, как мне написать пространство имен? Это не пространство имен, подобное этому
namespace Api\v1.1;
Есть ли соглашение об именах, на которое я могу ссылаться для использования «точки»?
Примечание. Я не хочу называть его версией v2, потому что это не серьезное обновление.
IMO, незначительные обновления не должны публиковать изменения в API. Поэтому мое предложение – придерживаться целочисленных версий API. У улучшений нет проблем, но существующие конечные точки должны вести себя как обычно.
Таким образом, ваши API-версии будут синхронизироваться с префиксами маршрутов и пространствами имен, а также с тестами.
ПРИМЕР
V1
, чтобы разработчики, вызывающие ваш api, не должны изменять весь свой код, который вызывает ваш API (и, следовательно, автоматически извлекают выгоду из новой младшей версии). Возможно, вы просто исправили ошибку, что делает их код так же, как и ожидалось, или вы опубликовали новую функцию, которая сама по себе не нарушает существующие функции-вызовы. V2
). Имейте в виду, что вы можете, конечно, отслеживать второстепенные версии внутри (например, в SCM), но разработчикам не нужно будет менять все свои API-вызовы, чтобы извлечь выгоду из этого небольшого исправления, которое вы опубликовали. В любом случае, приятно, если вы сообщите своим клиентам о новых младших версиях и исправлениях или улучшениях, которые они предлагают (блог, информационный бюллетень, ..)
Позвольте мне добавить, что я не знаю каких-либо RESTful API с небольшими префиксами API-URL-адресов, поэтому я думаю, что это довольно распространенная практика.
Вы не можете использовать точки, вместо этого используйте подчеркивания.
Но…
Хорошо продуманный api должен иметь BC между второстепенными версиями, поэтому вам не нужно создавать новую версию для незначительного обновления, вместо этого вам нужно написать совместимый код.