Ich gebe derzeit 401 Unauthorized zurück, wenn in meiner Django / Piston- basierten REST-API-Anwendung ein Validierungsfehler auftritt. Nachdem ich mir die Registrierung des HTTP- Statuscodes angesehen habe, bin ich nicht davon überzeugt, dass dies ein geeigneter Code für einen Validierungsfehler ist. Was empfehlen Sie?
- 400 schlechte Anfrage
- 401 nicht Autorisiert
- 403 Verboten
- 405 Methode nicht zulässig
- 406 Nicht akzeptabel
- 412 Voraussetzung fehlgeschlagen
- 417 Erwartung fehlgeschlagen
- 422 Nicht verarbeitbare Entität
- 424 Fehlgeschlagene Abhängigkeit
Update : "Validierungsfehler" oben bedeutet einen Datenvalidierungsfehler auf Anwendungsebene, dh falsch angegebene Datums- und Uhrzeitangaben, falsche E-Mail-Adressen usw.
validation
rest
http-status-codes
michaeljoseph
quelle
quelle
Antworten:
Wenn "Validierungsfehler" bedeutet, dass die Anforderung einen Clientfehler enthält, verwenden Sie HTTP 400 (Bad Request). Wenn der URI beispielsweise ein ISO-8601-Datum haben soll und Sie feststellen, dass er im falschen Format vorliegt oder sich auf den 31. Februar bezieht, geben Sie einen HTTP 400 zurück. Das Gleiche gilt, wenn Sie wohlgeformtes XML in einem Entitätskörper und erwarten es kann nicht analysiert werden.
(1/2016): In den letzten fünf Jahren hat sich WebDAVs spezifischeres HTTP 422 (Unprocessable Entity) zu einer sehr vernünftigen Alternative zu HTTP 400 entwickelt. Siehe beispielsweise die Verwendung in der JSON-API . Beachten Sie jedoch, dass HTTP 422 es nicht in HTTP 1.1, RFC-7231 geschafft hat .
Die RESTful Web Services von Richardson und Ruby enthalten einen sehr hilfreichen Anhang zur Verwendung der verschiedenen HTTP-Antwortcodes. Man sagt:
und:
quelle
Aus RFC 4918 (und auch dokumentiert unter http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml ):
quelle
Ein Duplikat in der Datenbank sollte a sein
409 CONFLICT
.Ich empfehle die Verwendung
422 UNPROCESSABLE ENTITY
für Validierungsfehler.Ich gebe hier eine längere Erklärung der 4xx-Codes: http://parker0phil.com/2014/10/16/REST_http_4xx_status_codes_syntax_and_sematics/
quelle
Hier ist es:
rfc2616 # section-10.4.1 - 400 Bad Request
rfc7231 # section-6.5.1 - 6.5.1. 400 schlechte Anfrage
Bezieht sich auf fehlerhafte (nicht gut geformte) Fälle!
rfc4918 - 11.2. 422 Nicht verarbeitbare Entität
Fazit
Faustregel: [_] 00 deckt den allgemeinsten Fall und Fälle ab, die nicht durch den festgelegten Code abgedeckt sind.
422 passt am besten zum Fehler bei der Objektvalidierung (genau meine Empfehlung :)
Was semantisch fehlerhafte Fehler betrifft - Denken Sie an die Validierung "Dieser Benutzername existiert bereits".
400 wird fälschlicherweise zur Objektvalidierung verwendet
quelle
Ich würde sagen, dass es sich technisch gesehen möglicherweise nicht um einen HTTP-Fehler handelt, da die Ressource (vermutlich) gültig angegeben wurde, der Benutzer authentifiziert wurde und kein Betriebsfehler aufgetreten ist (selbst die Spezifikation enthält jedoch einige reservierte Codes wie 402 Payment Required, die nicht vorhanden sind). t streng genommen auch HTTP-bezogen, obwohl es ratsam sein kann, dies auf Protokollebene zu haben, damit jedes Gerät den Zustand erkennen kann).
Wenn dies tatsächlich der Fall ist, würde ich der Antwort ein Statusfeld mit Anwendungsfehlern hinzufügen, wie z
<status> <code> 4 </ code> <message> Datumsbereich ist ungültig </ message> </ status>
quelle
In RFC 2616 , in dem HTTP 1.1 dokumentiert ist, finden Sie weitere Informationen zur Semantik dieser Fehler .
Persönlich würde ich wahrscheinlich verwenden
400 Bad Request
, aber dies ist nur meine persönliche Meinung ohne sachliche Unterstützung.quelle
Was genau meinen Sie mit "Validierungsfehler"? Was validierst du? Beziehen Sie sich auf einen Syntaxfehler (z. B. fehlerhaftes XML)?
Wenn das der Fall ist, würde ich sagen, dass 400 Bad Request wahrscheinlich das Richtige ist, aber ohne zu wissen, was Sie "validieren", ist es unmöglich zu sagen.
quelle