Angenommen, Sie Liste der Benutzer erhalten möchten durch den Aufruf GET
zu api/users
, aber zur Zeit wurde die Tabelle abgeschnitten , so dass keine Benutzer sind. Was ist die richtige Antwort für dieses Szenario: 404
oder 204
?
106
/api/users
während , dass man über/api/users/1
.Antworten:
Ich würde auch nicht sagen.
Warum nicht 404 (nicht gefunden)?
Der 404-Statuscode sollte für Situationen reserviert werden, in denen keine Ressource gefunden wird. In diesem Fall ist Ihre Ressource eine Sammlung von Benutzern . Diese Sammlung existiert, ist aber derzeit leer. Persönlich wäre ich als Autor eines Kunden für Ihre Bewerbung sehr verwirrt, wenn ich
200
einen Tag und einen404
am nächsten Tag bekommen würde, nur weil zufällig jemand ein paar Benutzer entfernt hat. Was soll ich machen? Ist meine URL falsch? Hat jemand die API geändert und es versäumt, eine Umleitung zu hinterlassen?Warum nicht 204 (kein Inhalt)?
Hier ist ein Auszug aus der Beschreibung des 204-Statuscodes von w3c
Dies mag in diesem Fall vernünftig erscheinen, aber ich denke, es würde auch die Kunden verwirren. A
204
soll anzeigen, dass eine Operation erfolgreich ausgeführt wurde und keine Daten zurückgegeben werden müssen. Dies ist perfekt als Antwort auf eineDELETE
Anfrage oder als Auslösen eines Skripts, das keine Daten zurückgeben muss. In diesem Fallapi/users
erwarten Sie normalerweise eine Darstellung Ihrer Benutzersammlung. Das einmalige Senden eines Antwortkörpers und das nicht anderweitige Senden ist inkonsistent und möglicherweise irreführend.Warum ich eine 200 verwenden würde (OK)
Aus den oben genannten Gründen (Konsistenz) würde ich eine Darstellung einer leeren Sammlung zurückgeben. Nehmen wir an, Sie verwenden XML. Ein normaler Antworttext für eine nicht leere Sammlung von Benutzern könnte folgendermaßen aussehen:
und wenn die Liste leer ist, können Sie einfach mit so etwas antworten (während Sie noch a verwenden
200
):In beiden Fällen erhält ein Client einen Antworttext, der einem bestimmten, bekannten Format folgt. Es gibt keine unnötige Verwirrung und Überprüfung des Statuscodes. Außerdem wird keine Statuscode-Definition verletzt. Jeder ist glücklich.
Sie können dasselbe mit JSON oder HTML oder einem anderen von Ihnen verwendeten Format tun.
quelle
[]
.GET /singleCoin
- Gibt zufälligeGET /severalCoins
Einzelmünzen aus Ihrer Tasche zurück , - Gibt einige Münzen aus Ihrer Tasche zurück, die Sie auf einmal greifen können. Nehmen wir an, Sie haben derzeit keine Münzen in der Tasche. Wenn Sie darum bitten, erhaltenGET /singleCoin
Sie404 Not Found
, aber wenn Sie darum bitten, erhaltenGET /severalCoins
Sie eine200 OK
leere Liste[]
. Eine Tatsache - Sie haben keine Münzen, die mit unterschiedlichen Antworten beschrieben wurden. Warum? Ich würde sagen, es ist besser, immer zu bekommen404 Not Found
, weil keine Münzen in Ihrer Tasche gefunden werden.GET /severalCoins
. Wenn Sie das MandatGET /severalCoins
muss ein paar Münzen zurückgeben , dann sollte es nicht mehr als 200 sein , weil es nicht in Ordnung ist; Der Server konnte nicht angeben, was der Client möchte. Für/singleCoin
diese liegt auf der Hand , weil Client genau eine Münze wollen, nicht mehr, nicht weniger. Dies gilt auch für/coins/7
. Im Gegensatz zum/coins
Endpunkt erwarten Kunden normalerweise keine Münze, eine Münze oder mehrere Münzen. Alle von ihnen sind gültige Antwort. Wenn es keine Münze gibt, dann ist es das, was sie wollen. Es ist wie ein MitarbeiterList<Coin>
in Java stattnull
.Ich würde je nach Laufzeitsituation einen von zwei Codes beantworten:
404 Nicht gefunden)
Diese Antwort ist ziemlich richtig, wenn Sie keine Tabelle haben. Nicht nur eine leere Tabelle, sondern KEINE BENUTZERTABELLE. Es bestätigt die genaue Idee - keine Ressource. Weitere Optionen sind, mehr Details bereitzustellen. WARUM Ihre Tabelle fehlt, gibt es einige detailliertere Codes, aber 404 ist ziemlich gut, um auf Situationen hinzuweisen, in denen Sie wirklich keine Tabelle haben.
200 (OK)
Alle Fälle, in denen Sie eine Tabelle haben, diese jedoch leer ist oder Ihr Anforderungsprozessor alle Ergebnisse herausgefiltert hat. Dies bedeutet, dass Ihre Anfrage korrekt ist, alles in Ordnung ist, Sie jedoch keine Daten abgleichen, nur weil entweder wir keine Daten haben oder keine Daten, die Ihrer Anfrage entsprechen. Dies sollte sich von der Antwort auf Sicherheitsverweigerung unterscheiden. Ich stimme auch dafür, 200 zurückzugeben, wenn Sie einige Daten haben und im Allgemeinen auf die Tabelle zugreifen dürfen, aber keinen Zugriff auf alle Daten haben, die Ihrer Anfrage entsprechen (Daten wurden aus Sicherheitsgründen auf Objektebene herausgefiltert, aber im Allgemeinen dürfen Sie dies Anfrage).
quelle
Wenn Sie eine Liste mit Benutzerobjekten erwarten, ist die beste Lösung, eine leere Liste ([]) mit 200 OK zurückzugeben, als eine 404- oder eine 204-Antwort zu verwenden.
quelle
gibt definitiv 200 zurück.
404 bedeutet, dass die Ressource nicht gefunden wurde. Aber die Ressource existiert. Und auch, wenn die Antwort den Status 404 hat. Woher wissen Sie, dass die Benutzerliste leer oder gefüllt ist?
quelle
Es muss 200 OK sein mit leerer Liste sein.
Warum: Leere Tabelle bedeutet, dass die Tabelle vorhanden ist, aber keine Datensätze enthält.
404 Nicht gefunden bedeutet, dass der angeforderte Endpunkt nicht vorhanden ist.
quelle