200
Ugh ... (309, 400, 403, 409, 415, 422) ... viele Antworten, die versuchen, den besten Rückkehrcode für eine erfolgreiche HTTP-Anforderung, aber einen fehlgeschlagenen REST-Aufruf zu erraten, zu argumentieren und zu standardisieren .
Es ist falsch , HTTP-Statuscodes und REST-Statuscodes zu mischen.
Ich habe jedoch viele Implementierungen gesehen, die sie gemischt haben, und viele Entwickler stimmen mir möglicherweise nicht zu.
HTTP-Rückkehrcodes beziehen sich auf sich HTTP Request
selbst. Ein REST-Aufruf wird mithilfe einer Hypertext Transfer Protocol-Anforderung ausgeführt und arbeitet auf einer niedrigeren Ebene als die aufgerufene REST-Methode selbst. REST ist ein Konzept / Ansatz, und seine Ausgabe ist ein geschäftliches / logisches Ergebnis, während der HTTP-Ergebniscode ein Transportergebnis ist .
Die Rückgabe von "404 nicht gefunden" beim Aufrufen von / users / ist beispielsweise verwirrend, da dies Folgendes bedeuten kann:
- URI ist falsch (HTTP)
- Es wurden keine Benutzer gefunden (REST)
"403 Verboten / Zugriff verweigert" kann bedeuten:
- Besondere Erlaubnis erforderlich. Browser können damit umgehen, indem sie den Benutzer / das Passwort fragen. (HTTP)
- Auf dem Server konfigurierte falsche Zugriffsberechtigungen. (HTTP)
- Sie müssen authentifiziert sein (REST)
Und die Liste kann mit '500 Server error' (ein Apache / Nginx HTTP-Fehler oder ein Business Constraint-Fehler in REST) oder anderen HTTP-Fehlern usw. fortgesetzt werden.
Aus dem Code ist schwer zu verstehen, was der Fehlergrund, ein HTTP-Fehler (Transportfehler) oder ein REST-Fehler (logisch) war.
Wenn die HTTP-Anforderung physisch erfolgreich ausgeführt wurde, sollte immer 200 Code zurückgegeben werden, unabhängig davon, ob die Datensätze gefunden wurden oder nicht. Weil die URI-Ressource gefunden wurde und vom HTTP-Server verarbeitet wurde. Ja, möglicherweise wird ein leerer Satz zurückgegeben. Ist es möglich, eine leere Webseite mit 200 als HTTP-Ergebnis zu erhalten?
Stattdessen können Sie 200 HTTP-Code mit einigen Optionen zurückgeben:
- "Fehler" -Objekt in JSON-Ergebnis, wenn etwas schief geht
- Leeren Sie das JSON-Array / Objekt, wenn kein Datensatz gefunden wurde
- Ein Bool-Ergebnis- / Erfolgsflag in Kombination mit vorherigen Optionen für eine bessere Handhabung.
Einige Internetanbieter können Ihre Anfragen abfangen und Ihnen einen 404-HTTP-Code zurückgeben. Dies bedeutet nicht, dass Ihre Daten nicht gefunden werden, aber auf Transportebene stimmt etwas nicht.
Aus dem Wiki :
Im Juli 2004 setzte der britische Telekommunikationsanbieter BT Group das Cleanfeed-System zum Blockieren von Inhalten ein, das bei jeder Anforderung von Inhalten, die von der Internet Watch Foundation als potenziell illegal eingestuft wurden, einen 404-Fehler zurückgibt. Andere ISPs geben unter den gleichen Umständen einen "verbotenen" HTTP 403-Fehler zurück. In Thailand und Tunesien wurde auch über die Praxis berichtet, gefälschte 404-Fehler als Mittel zur Verschleierung der Zensur einzusetzen. In Tunesien, wo die Zensur vor der Revolution von 2011 streng war, wurden die Menschen auf die Natur der gefälschten 404-Fehler aufmerksam und schufen einen imaginären Charakter namens "Ammar 404", der "den unsichtbaren Zensor" darstellt.
Warum nicht einfach mit so etwas antworten?
{
"result": false,
"error": {"code": 102, "message": "Validation failed: Wrong NAME."}
}
Google gibt in seiner Geokodierungs-API immer 200 als Statuscode zurück, auch wenn die Anforderung logisch fehlschlägt: https://developers.google.com/maps/documentation/geocoding/intro#StatusCodes
Facebook gibt für erfolgreiche HTTP-Anforderungen immer 200 zurück, auch wenn die REST-Anforderung fehlschlägt: https://developers.facebook.com/docs/graph-api/using-graph-api/error-handling
Es ist ganz einfach, HTTP-Statuscodes gelten für HTTP-Anforderungen. Die REST-API ist Ihre, definieren Sie Ihre Statuscodes.