Для API валідація - це контракт: клієнти парсять помилки програмно, тож формат і поведінка мають бути передбачуваними.
Що Laravel дає з коробки: якщо запит очікує JSON (Accept: application/json), замість перенаправлення повертається 422:
{
"message": "The email field is required. (and 1 more error)",
"errors": {
"email": ["The email field is required."],
"items.0.quantity": ["The items.0.quantity field must be at least 1."]
}
}
Вкладені ключі сплющуються в «крапкову» нотацію.
Що варто налаштувати:
- Невідомі поля.
#[FailOnUnknownFields]на запиті форми (або глобальноFormRequest::failOnUnknownFields()) відхиляє поля, яких немає в правилах. Помилки клієнта на кшталтemialстають помітними одразу, а не тихо ігноруються. - Стабільні повідомлення. Клієнти не мають залежати від тексту - лише від ключів полів і HTTP-коду. Якщо потрібні машинні коди помилок, їх додають власним форматом відповіді.
- Межі вхідних даних:
maxдля рядків і масивів, ліміт розміру тіла запиту на вебсервері. - Мова повідомлень за заголовком
Accept-Language, якщо API багатомовний.
Тести: assertUnprocessable() і assertInvalid([...])/assertJsonValidationErrors() фіксують контракт, щоб зміна правил не зламала клієнтів непомітно.
Докладніше в документації: Формат відповіді з помилками валідації