400 поганий запит тепер, здається, є найкращим кодом статусу HTTP / 1.1 для вашого випадку використання.
На момент Вашого запитання (і моєї оригінальної відповіді) RFC 7231 не була річчю; в цей момент я заперечив, 400 Bad Request
тому що RFC 2616 сказав (з моїм наголосом):
Сервер не міг зрозуміти запит через неправильний синтаксис .
і запит, який ви описуєте, є синтаксично дійсним JSON, укладеним у синтаксично допустимий HTTP, і, таким чином, сервер не має проблем із синтаксисом запиту.
Однак, як вказував Лі Саферіт у коментарях , RFC 7231, який застаріло RFC 2616, не включає це обмеження :
Код стану 400 (поганий запит) вказує на те, що сервер не може або не обробляє запит через те, що сприймається як помилка клієнта (наприклад, синтаксис неправильного запиту, неправильне обрамлення повідомлення запиту або оманливе маршрутизація запиту).
Однак перед цим переформулюванням (або якщо ви хочете посперечатися з приводу того, що RFC 7231 є лише запропонованим стандартом зараз), 422 Unprocessable Entity
не здається неправильним кодом статусу HTTP для вашого випадку використання, оскільки, як свідчить вступ до RFC 4918:
Хоча коди статусу, надані HTTP / 1.1, є достатніми для опису більшості умов помилок, з якими стикаються методи WebDAV, є деякі помилки, які не належать акуратно до існуючих категорій. Ця специфікація визначає додаткові коди статусу, розроблені для методів WebDAV (Розділ 11)
І опис422
говорить:
Код стану 422 (Unprocessable Entity) означає, що сервер розуміє тип вмісту об'єкта запиту (отже, код статусу 415 (непідтримуваний тип медіа) неприйнятний), і синтаксис об'єкта запиту є правильним (таким чином, 400 (поганий запит) ) код статусу невідповідний), але не вдалося обробити містяться інструкцій.
(Зверніть увагу на посилання на синтаксис; я підозрюю, що 7231 частково застаріло 4918 також)
Це звучить точно як ваша ситуація, але на всякий випадок, коли виникли сумніви, він продовжує говорити:
Наприклад, ця умова помилки може виникнути, якщо орган запиту XML містить добре сформовані (тобто синтаксично правильні), але семантично помилкові інструкції XML.
(Замініть "XML" на "JSON", і я думаю, що ми можемо погодитися, що це ваша ситуація)
Тепер деякі заперечують, що RFC 4918 йдеться про "розширення HTTP для веб-розподілених авторизацій та версій (WebDAV)" і що ви (імовірно) нічого не робите з WebDAV, тому не повинні використовувати речі з нього.
З огляду на вибір між використанням коду помилки в початковому стандарті, який явно не охоплює ситуацію, і типом розширення, яке точно описує ситуацію, я б вибрав останній.
Крім того, RFC 4918, розділ 21.4, посилається на реєстр кодів статусу протоколу передачі гіпертексту IANA (HTTP) , де їх можна знайти 422.
Я пропоную, щоб клієнт або сервер HTTP цілком доцільно використовувати будь-який код статусу з цього реєстру, якщо вони роблять це правильно.
Але що стосується HTTP / 1.1, RFC 7231 має тягу, тому просто використовуйте 400 Bad Request
!