#laravel #api #rest
#laravel #API #rest
Вопрос:
Я работаю над предоставлением API с использованием одного базового URL (напримерhttps://api.domain.com ) и наличие этого URL-адреса для обработки всех версий API (потребителю API нужно будет отправить Accept-Version
в заголовке запроса, чтобы указать, какую версию API они пытаются использовать).
Как бы я управлял этим подходом в Laravel?
Я думал, что мог бы разместить все свои контроллеры, помощники, модели, маршруты, конфигурацию и т.д. скажем, в 1.0.0
папке и использовать их для версии 1 моего API. Когда я выпускаю новую версию, возможно, я делаю копии исходного кода, помещаю их в 1.1.0
папку и вношу в нее изменения.
Если бы я использовал этот подход к папке, что мне нужно было бы сделать в маршрутах, чтобы указать, какую папку использовать? Как мои контроллеры узнают, какие модели, помощники, конфигурация и т.д. как использовать? Похоже, что этот подход может стать очень грязным и запутанным.
Ответ №1:
В вашем RouteServiceProvider.php
вы можете определить маршруты для приложения. Здесь вы также можете определить пространство имен, префикс имени и промежуточное программное обеспечение для маршрутов. Просто добавьте новую карту маршрутов для каждой версии вашего API. Попросите промежуточное программное обеспечение проверить версию, перенаправив при необходимости, и установите префикс имени / пространство имен в правильный каталог версии.
RouteServiceProvider
будет выглядеть примерно так:
protected function mapApi-1-0-0-Routes()
{
Route::middleware(['api', 'version'])
->name('1.0.0.')
->namespace('1.0.0')
->group(base_path('routes/api.php'));
}
тогда ваш middleware
будет выглядеть примерно так
public function handle($request, Closure $next)
{
switch ($request->version) {
case "1.0.0":
$route = $request->version.$request->route()->getName();
break;
// more versions
return redirect()->route($route)->with($request);
}
Я не тестировал это.
Префиксы имен групп маршрутов:https://laravel.com/docs/7.x/routing#route-group-name-prefixes
Пространства имен маршрутов:https://laravel.com/docs/7.x/routing#route-group-namespaces
Перенаправление именованных маршрутов:https://laravel.com/docs/7.x/redirects#redirecting-named-routes
Глобальное промежуточное программное обеспечение:https://laravel.com/docs/7.x/middleware#global-middleware
Написание поставщиков услуг:https://laravel.com/docs/7.x/providers#writing-service-providers