Довідник HTTP-кодів відповіді
Коли повертати кожен код і як це виглядає в Laravel або Symfony.
Відповідає на питання «який код тут правильний»
Проблема не в тому, щоб згадати, що 404 це «не знайдено», а в тому, щоб вибрати між 400, 409 і 422, коли запит формально валідний, але зробити його не можна. У довіднику до кожного коду написано, у якій саме ситуації його повертати, і показано, як це зробити в Laravel і Symfony.
У PHP код відповіді ставиться через http_response_code або через обʼєкт відповіді фреймворку. У Laravel зручніше через response()->json($data, 422) чи через винятки, які самі перетворюються в потрібний код: ValidationException дає 422, ModelNotFoundException 404, AuthorizationException 403.
// Laravel: винятки самі стають кодами
throw ValidationException::withMessages([
'email' => 'Уже зареєстрований',
]); // → 422
abort(404); // → 404 з вашою сторінкою
return response()->noContent(); // → 204
// Symfony
return new JsonResponse($data, Response::HTTP_UNPROCESSABLE_ENTITY);
Що питають про цей інструмент
400 означає, що сервер не зміг розібрати запит: битий JSON, відсутній обовʼязковий параметр, невірний Content-Type. 422 запит розібрано, структура правильна, але значення не проходять правила: email уже зайнятий, дата в минулому. Для валідації форми правильний 422, і саме його повертає Laravel.
401 ми не знаємо, хто ви: токен відсутній, протермінований або невалідний, клієнт має спробувати авторизуватись знову. 403 ми знаємо, хто ви, і саме вам це заборонено; повторна авторизація не допоможе, тому не відправляйте на сторінку входу.
204 без тіла, якщо клієнту нічого не потрібно, або 200 з обʼєктом, якщо ви віддаєте оновлений стан. 202 доречний, коли видалення пішло в чергу й фактично ще не сталося: тоді клієнт знає, що результат буде згодом.