Laravel любит обещать «из коробки всё готово». Типа «смотри, у нас есть Eloquent, роутинг, контроллеры, миграции, Sanctum — бери и делай API». И оно реально так работает… пока у тебя игрушечный сервис для диплома или пет-проекта. Но как только ты выкатываешь REST API в продакшен, понимаешь: магия заканчивается, а начинается рутина — от оптимизации запросов до борьбы с авторизацией и тоннами багов на фронте.
Старт: проект за 2 минуты
composer create-project laravel/laravel api-example
cd api-example
Красиво? Да. Но по факту ты получаешь голый фреймворк, в котором дальше надо копать. База, модели, роуты, контроллеры — всё как обычно.
База: стандартная скука
.env настраиваешь под MySQL или что угодно:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=your_database_name
DB_USERNAME=your_username
DB_PASSWORD=your_password
И молись, чтобы у DBA не было плохого настроения, потому что твои миграции с $table->string('email')->unique(); могут быть восприняты как личное оскорбление.
Модели и миграции: сахар, но не всегда сладкий
php artisan make:model User -m создаёт тебе модель и миграцию. Вроде удобно.
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
Выглядит красиво. Но потом к тебе приходит прод и говорит: «А сделай-ка 200к пользователей с разными ролями, правами, статусами». И ты начинаешь лепить костыли: дополнительные таблицы, связи, индексы, оптимизацию. Потому что «универсальная миграция из туториала» умирает быстрее, чем дешёвый VPS.
Контроллеры: CRUD за пять минут
php artisan make:controller UserController --apiХоп, и у тебя готов каркас под CRUD.
Route::apiResource('users', UserController::class);
Звучит магически, но на практике это тупо заготовка. Захочешь что-то сложнее «создать/обновить/удалить» — например, фильтрацию, пагинацию или вложенные ресурсы — будешь вручную дописывать. И да, будешь материться, потому что фронт ждёт JSON в формате, который у тебя не совпадает с дефолтным ресурсом Laravel.
Аутентификация: Sanctum vs реальность
Laravel предлагает Sanctum — «лёгкое решение для API-токенов». И действительно:
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, Notifiable;
}
В config/auth.php настраиваешь драйвер, запускаешь миграции, и готово. Пользователи могут авторизоваться и стучаться к твоему API с токенами.
На практике:
- токены разрастаются пачками, если их не чистить;
- фронт случайно теряет токен и гонит багрепорт «API не работает»;
- админы потом просят ротацию токенов, а у тебя её нет;
Тестирование: Postman — твой лучший друг
Да, можно сидеть и гонять curl, но нормальный человек всё равно берёт Postman или Insomnia. Там ты сразу видишь, что твой API возвращает 500-ю ошибку, потому что ты забыл use Illuminate\Http\Request; в контроллере.
И именно тут ты понимаешь, что «базовый REST API» из туториала покрывает процентов 20 твоих реальных задач. Остальное — кастом, костыли, правки под фронт и вечная война с тем, кто придумал отправлять дату в формате dd.mm.yyyy.
Вывод
Сделать API на Laravel — легко. Сделать API, которое выдержит прод, нагрузку и требования бизнеса — больно. Laravel даёт тебе sugar-синтаксис, миграции, роутинг, аутентификацию. Но под капотом всё равно сидит обычный SQL, обычный PHP и обычные баги.
И если ты думаешь, что API в Laravel — это «нажал artisan и всё готово», то жди сюрпризов. Потому что REST API — это не про магию. Это про то, чтобы держать в голове архитектуру, оптимизацию и постоянный контроль.
0 комментариев