Was ist der optimale HTTP-Antwortcode, wenn nicht 200 (alles in Ordnung), sondern ein Fehler bei der Eingabe gemeldet wird?
Sie senden beispielsweise einige Daten an den Server und es wird darauf reagiert, dass Ihre Daten falsch sind
Verwendung 500
sieht mehr wie Server Problem
mit 200
mit Warnung / Fehlerantworttext schlecht ist (so dass das Caching und alles ist nicht OK)
mit 204
und Rückkehr nichts, ist vielleicht gut (aber gut unterstützt?)
mit 404
falsch ist , wenn die angeforderte Pfad (Skript) zur Verfügung und am richtigen Ort
api
http
validation
Marek Sebera
quelle
quelle
Antworten:
Wir hatten das gleiche Problem auch bei der Erstellung unserer API. Wir suchten nach einem HTTP-Statuscode, der einem entspricht
InvalidArgumentException
. Nachdem wir den folgenden Quellartikel gelesen hatten, verwendeten wir422 Unprocessable Entity
die folgenden Zustände:Quelle: https://www.bennadel.com/blog/2434-http-status-codes-for-invalid-data-400-vs-422.htm
quelle
Codes, die mit 4 (4xx) beginnen, sind für Clientfehler gedacht. Vielleicht könnten 400 (Bad Request) für diesen Fall geeignet sein? Die Definition in http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html lautet:
"Die Anfrage konnte vom Server aufgrund einer fehlerhaften Syntax nicht verstanden werden. Der Client sollte die Anfrage NICHT ohne Änderungen wiederholen."
quelle
400 Bad Request
ist nicht schlecht, sollte aber generell für fehlerhafte Syntax reserviert werden. OP scheint mehr über einen Fall mit wohlgeformter Syntax, aber ungültigen Werten besorgt zu sein. Plus 400 ist ein ziemlich häufiger Antwortcode "Oh Scheiße, etwas stimmte nicht", den Sie möglicherweise von einem bestimmten Fall fehlerhafter Eingabe unterscheiden möchten.Neben der RFC-Spezifikation können Sie dies auch in Aktion sehen. Schauen Sie sich die Twitter-Antworten an.
https://developer.twitter.com/de/docs/ads/general/guides/response-codes
quelle
409 Conflict
könnte eine akzeptable Lösung sein.Laut: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
Das Dokument fährt mit einem Beispiel fort:
In meinem Fall möchte ich eine Zeichenfolge, die eindeutig sein muss, über eine API in eine Datenbank einfügen. Bevor ich es zur Datenbank hinzufüge, überprüfe ich, ob es noch nicht in der Datenbank vorhanden ist.
Wenn ja, werde ich zurückkehren
"Error: The string is already in the database", 409
.Ich glaube, das wollte das OP: Ein Fehlercode, der geeignet ist, wenn die Daten die Kriterien des Servers nicht erfüllen.
quelle
Nach dem folgenden Szenario
Angenommen, jemand sendet eine Anfrage an Ihren Server mit Daten, die im richtigen Format vorliegen, aber einfach keine "guten" Daten sind. Stellen Sie sich zum Beispiel vor, jemand hat einen String-Wert an einen API-Endpunkt gesendet, der einen String-Wert erwartet hat. Der Wert der Zeichenfolge enthielt jedoch Daten, die auf die schwarze Liste gesetzt wurden (z. B. um zu verhindern, dass Personen "Kennwort" als Kennwort verwenden). dann könnte der Statuscode entweder 400 oder 422 sein?
Bis jetzt hätte ich eine "400 Bad Request" zurückgegeben, was laut w3.org bedeutet:
Diese Beschreibung passt nicht ganz zum Umstand; Wenn Sie sich jedoch die Liste der im HTTP / 1.1-Protokoll definierten zentralen HTTP-Statuscodes ansehen, ist dies wahrscheinlich die beste Wahl.
Kürzlich hat mich jedoch jemand aus meinem Entwicklerteam darauf hingewiesen, dass beliebte APIs zunehmend HTTP-Erweiterungen verwenden, um ihre Fehlerberichte genauer zu gestalten. Insbesondere verwenden viele APIs wie Twitter und Recurly den Statuscode "422 Unprocessable Entity", wie in der HTTP-Erweiterung für WebDAV definiert. Der HTTP-Statuscode 422 lautet:
Zurück zu unserem Passwortbeispiel von oben: Dieser 422-Statuscode ist viel angemessener. Der Server versteht, was Sie versuchen. und es versteht die Daten, die Sie übermitteln; Diese Daten werden einfach nicht verarbeitet.
quelle
404 - Nicht gefunden - kann verwendet werden für Der angeforderte URI ist ungültig oder die angeforderte Ressource, z. B. ein Benutzer, ist nicht vorhanden.
quelle