У свіжому застосунку Laravel файлу routes/api.php немає - його додає команда:
php artisan install:api
Вона встановлює Laravel Sanctum (автентифікація токенами), створює routes/api.php і підключає його в bootstrap/app.php:
->withRouting(
web: __DIR__.'/../routes/web.php',
api: __DIR__.'/../routes/api.php',
// apiPrefix: 'api/v1',
)
Чим маршрути API відрізняються:
web.php |
api.php |
|
|---|---|---|
| префікс URL | немає | /api (змінюється через apiPrefix) |
| група middleware | web |
api |
| сесія й cookie | так | ні (stateless) |
| CSRF-захист | так | ні |
| автентифікація | сесія | токени (auth:sanctum) |
// routes/api.php
Route::middleware('auth:sanctum')->group(function () {
Route::get('/user', fn (Request $request) => $request->user());
Route::apiResource('posts', PostController::class);
});
apiResource реєструє маршрути ресурсу без create і edit (вони потрібні лише для HTML-форм): index, store, show, update, destroy. Контролер - php artisan make:controller PostController --api --model=Post.
Що варто знати:
- група
apiза замовчуванням не обмежує частоту запитів. Обмеження вмикається явно: визначити лімітерRateLimiter::for('api', ...)і підключити$middleware->throttleApi()вbootstrap/app.php(абоthrottle:apiна маршрутах); - відповіді-помилки для запитів з
Accept: application/jsonLaravel повертає в JSON. Клієнтам API варто завжди надсилати цей заголовок - інакше помилка валідації може стати редиректом; - власний SPA на тому ж домені може ходити в
api.phpз сесійною автентифікацією Sanctum ($middleware->statefulApi()), без токенів; - маршрути з
web.phpтеж можуть віддавати JSON - для внутрішніх запитів Livewire/Inertia-застосунку окремий API часто не потрібен.
Перевірка: php artisan route:list --path=api показує всі маршрути API з middleware.