2010-12-02 7 views
11

Unser Team entwickelt RESTFul-Anwendungen ... wir diskutieren den "BEST PRACTICE" -Ansatz.REST: Zuordnung 404 HTTP-Statuscodes

Soll 404-Statuscodeantwort für eine filterartige Abfrage zurückgegeben werden? Say my GET URL ist

.../1 ​​/ service/starts/a.json

und es gibt alle Werte, die mit A in meiner Datenbank ... aber wenn keine "a" Werte gefunden werden soll ich nur den Statuscode 200 mit einer leeren JSON-Zeichenfolge zurückgeben? oder Statuscode 404.

Danke!

Antwort

15

Siehe this Frage, in der Aktualisierung meiner Antwort adressiere ich Ihr Problem. Insbesondere dieses Bit,

Ich denke, die Antwort, ob auf return 404 auf das hängt, was die Ressource, die abgerufen wird. Ist es eine Darstellung einer Suche Ergebnis, oder ist es eine Darstellung eines Produkts? Um das zu wissen, brauchen Sie wirklich , um die Link-Beziehung, die uns zu der URL führte, zu betrachten.

Wenn die URL zurückkehren sollte sollte eine Produktdarstellung dann ein 404 zurückgegeben werden, wenn der Code existiert nicht. Wenn die URL eine Suche Ergebnis zurückgibt, dann sollte es nicht wieder ein 404.

Das Endergebnis ist, dass das, was die URL aussieht ist nicht der entscheidende Faktor . Allerdings ist es Konvention, dass Abfragezeichenfolgen verwendet werden, um Suchergebnisse zurückzugeben, so ist es mehr intuitiv zu verwenden, dass Stil der URL , wenn Sie 404s nicht zurückgeben möchten.

+5

Ja, ich stimme Darrel zu. Einfach, "keine Ergebnisse" ist ein gültiges Suchergebnis. Die Ressource existiert, ihre Darstellung ist einfach "leer". Also, 404 ist nicht gerechtfertigt. Die Anfrage nach einer konkreten Ressource durch einen Bezeichner (/ customers/123), der nicht existiert, garantiert eine 404. Das ist keine Abfrage, das ist eher eine "Dereferenzierung" eines Zeigers. –

3

Es kann sinnvoller sein, einen 204 Code zurückzugeben, der "Kein Inhalt" bedeutet. Dies wäre etwas effizienter, da ein Status mit 204 keinen Dokumentinhalt haben kann und Sie den Code erkennen können, anstatt die Antwort analysieren zu müssen.