Для чого варто, я роблю це інакше. Вдалий дзвінок просто має об'єкти JSON. Мені не потрібен об'єкт JSON вищого рівня, який містить поле успіху, що вказує на істинне, і поле корисного навантаження, що містить об'єкт JSON. Я просто повертаю відповідний об’єкт JSON з 200 або будь-яким, що підходить в діапазоні 200 для статусу HTTP у заголовку.
Однак якщо є помилка (щось в сім'ї 400), я повертаю добре сформований об’єкт помилки JSON. Наприклад, якщо клієнт розміщує користувача з адресою електронної пошти та номером телефону, і один із них неправильно (тобто я не можу вставити його в базу даних), я поверну щось подібне:
{
"description" : "Validation Failed"
"errors" : [ {
"field" : "phoneNumber",
"message" : "Invalid phone number."
} ],
}
Важливі біти тут полягають у тому, що властивість "field" має точно відповідати полі JSON, яке не може бути перевірено. Це дозволяє клієнтам точно знати, що пішло не так у їх запиті. Крім того, "повідомлення" є в мові запиту. Якщо і "emailAddress", і "phoneNumber" були недійсними, тоді масив "помилок" міститиме записи для обох. Орган відповіді JSON 409 (конфлікт) може виглядати так:
{
"description" : "Already Exists"
"errors" : [ {
"field" : "phoneNumber",
"message" : "Phone number already exists for another user."
} ],
}
За допомогою коду статусу HTTP та цього JSON клієнт має все необхідне, щоб реагувати на помилки детермінованим способом, і він не створює нового стандарту помилок, який намагається завершити заміну кодів HTTP-статусу. Зверніть увагу, вони трапляються лише для 400 помилок. За що завгодно в діапазоні 200 я можу просто повернути все, що підходить. Для мене це часто подібний до HAL об'єкт JSON, але це насправді не має значення.
Я подумав над додаванням - це чисельний код помилки або в записах масиву "помилки", або в корені самого об'єкта JSON. Але поки що нам це не було потрібно.