HTTP коды состояния при ошибках в теле запроса
Может кто-нибудь уточнить, какие коды статуса мне следует ожидать в следующих ситуациях? Например, я отправляю запрос POST с таким форматом тела:
{
"id": 321,
"username": "tombrown",
"email": "tombrown@gmail.com",
"password": "qwerty123",
"activated": true
}
Итак, вопросы:
1) Должен ли сервер возвращать 400, если я указываю данные неправильного типа, например, "id": "threetwoone" вместо int, "activated": "yes" вместо boolean и т. Д. Или сервер должен скорее возвращать 422 здесь?
2) Значение "id" должно быть int, но на самом деле это long int, например, 9223372036854774700.
3) В теле отсутствуют некоторые поля, например, я пытаюсь отправить:
{
"id": 321,
"username": "tombrown",
"activated": true
}
Должны ли эти примеры вызывать 400, 422 или некоторые другие варианты? Какая реакция должна быть правильной?
1 ответ
Если JSON синтаксически неверен, верните 400
, Если JSONсинтаксически допустим, но его содержимое недопустимо, вернуть 422
чтобы указать, что объект запроса не может быть обработан сервером.
Смотрите следующую цитату из RFC 4918 (для вашей ситуации просто прочитайтеJSON, когда он говорит XML):
11.2. 422 необработанного объекта
422
Код состояния (Unprocessable Entity) означает, что сервер понимает тип содержимого объекта запроса (следовательно,415
(Неподдерживаемый тип носителя) код состояния не подходит), и синтаксис объекта запроса является правильным (таким образом,400
(Неправильный запрос) код состояния не подходит), но не удалось обработать содержащиеся в нем инструкции. Например, это условие ошибки может возникать, если тело запроса XML содержит правильно сформированные (то есть синтаксически правильные), но семантически ошибочные инструкции XML.