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 einen 404
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
Der Server hat die Anforderung erfüllt, muss jedoch keinen Entitätskörper zurückgeben und möchte möglicherweise aktualisierte Metainformationen zurückgeben.
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 eine DELETE
Anfrage oder als Auslösen eines Skripts, das keine Daten zurückgeben muss. In diesem Fall api/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:
<users>
<user>
<id>1</id>
<name>Tom</name>
</user>
<user>
<id>2</id>
<name>IMB</name>
</user>
</users>
und wenn die Liste leer ist, können Sie einfach mit so etwas antworten (während Sie noch a verwenden 200
):
<users/>
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.