400 Bad Request scheint nun der beste HTTP / 1.1-Statuscode für Ihren Anwendungsfall zu sein.
Zum Zeitpunkt Ihrer Frage (und meiner ursprünglichen Antwort) war RFC 7231 keine Sache. An diesem Punkt habe ich Einwände erhoben, 400 Bad Request
weil RFC 2616 sagte (mit Schwerpunkt auf meinem):
Die Anforderung konnte vom Server aufgrund einer fehlerhaften Syntax nicht verstanden werden .
und die von Ihnen beschriebene Anforderung ist syntaktisch gültiges JSON, das in syntaktisch gültigem HTTP eingeschlossen ist, und daher hat der Server keine Probleme mit der Syntax der Anforderung.
Wie Lee Saferite in den Kommentaren hervorhob , enthält RFC 7231, das RFC 2616 überholt, diese Einschränkung jedoch nicht :
Der Statuscode 400 (Bad Request) gibt an, dass der Server die Anforderung aufgrund eines als Clientfehler wahrgenommenen Fehlers nicht verarbeiten kann oder will (z. B. fehlerhafte Anforderungssyntax, ungültiges Anforderungsnachrichten-Framing oder irreführendes Anforderungsrouting).
Doch vor dieser Umformulierung (oder , wenn Sie über RFC 7231 nur Wortklauberei wollen ein Wesen vorgeschlagen Standard jetzt), 422 Unprocessable Entity
scheint nicht einen falschen HTTP - Statuscode für Ihren Anwendungsfall, denn wie die Einführung in RFC 4918 sagt:
Während die von HTTP / 1.1 bereitgestellten Statuscodes ausreichen, um die meisten Fehlerbedingungen zu beschreiben, auf die WebDAV-Methoden stoßen, gibt es einige Fehler, die nicht genau in die vorhandenen Kategorien fallen. Diese Spezifikation definiert zusätzliche Statuscodes, die für WebDAV-Methoden entwickelt wurden (Abschnitt 11).
Und die Beschreibung von422
sagt:
Der Statuscode 422 (nicht verarbeitbare Entität) bedeutet, dass der Server den Inhaltstyp der Anforderungsentität versteht (daher ist ein 415-Statuscode (nicht unterstützter Medientyp) unangemessen) und die Syntax der Anforderungsentität korrekt ist (daher eine 400 (fehlerhafte Anforderung) ) Statuscode ist unangemessen) konnte die enthaltenen Anweisungen jedoch nicht verarbeiten.
(Beachten Sie den Verweis auf die Syntax; ich vermute, dass 7231 auch 4918 teilweise überholt hat)
Das klingt genau nach Ihrer Situation, aber für den Fall, dass Zweifel bestehen, heißt es weiter:
Diese Fehlerbedingung kann beispielsweise auftreten, wenn ein XML-Anforderungshauptteil wohlgeformte (dh syntaktisch korrekte), aber semantisch fehlerhafte XML-Anweisungen enthält.
(Ersetzen Sie "XML" durch "JSON" und ich denke, wir können uns darauf einigen, dass dies Ihre Situation ist.)
Einige werden nun einwenden, dass es in RFC 4918 um "HTTP-Erweiterungen für das verteilte Web-Authoring und -Versionierung (WebDAV)" geht und dass Sie (vermutlich) nichts mit WebDAV zu tun haben und daher keine Dinge daraus verwenden sollten.
Angesichts der Wahl zwischen der Verwendung eines Fehlercodes im ursprünglichen Standard, der die Situation ausdrücklich nicht abdeckt, und eines aus einer Erweiterung, die die Situation genau beschreibt, würde ich letzteren wählen.
Darüber hinaus bezieht sich RFC 4918, Abschnitt 21.4, auf die HTTP-Statuscode-Registrierung (IANA Hypertext Transfer Protocol) , in der 422 zu finden ist.
Ich schlage vor, dass es für einen HTTP-Client oder -Server völlig vernünftig ist, einen Statuscode aus dieser Registrierung zu verwenden, sofern dies korrekt ist.
Aber ab HTTP / 1.1 hat RFC 7231 Traktion, also einfach verwenden 400 Bad Request
!