HTTP 200 oder 404 für leere Liste?

Ich weiß, dass dies eine ziemlich häufige Frage ist, aber ich habe keine Antwort gefunden, die mich zufriedenstellt.

Ich benutze bereits seit einiger Zeit das Django Rest Framework, aber dies ist meistens irrelevant, abgesehen von dem angegebenen Beispiel. Standardmäßig wird HTTP 200 mit einer leeren Listenressource zurückgegeben, wenn auf eine Route mit einer leeren Liste von Elementen zugegriffen wird. ZB wenn wir eine Route wie @ hätt/articles/ um auf eine Artikelliste zuzugreifen, die jedoch keine Artikel enthielt, würden wir eine Antwort wie die folgende erhalten:

{"count":0, "next":null, "previous":null, "items": []}

Welche ist vollkommen in Ordnung. Wir haben die gesuchte Ressource unter / articles / gefunden. Sie enthält nur zufällig keine Elemente.

Wenn wir auf die Route zugreifen/articles/?page=1, wir erhalten genau die gleiche Antwort.

So weit, ist es gut. Nun versuchen wir auf @ zuzugreif/articles/?page=2 und der Antwortcode ändert sich. Jetzt bekommst du ein404 als ob die Ressource nicht mit einer Fehlermeldung gefunden werden könnte, die besagt, dass die Seite keine Ergebnisse enthält. Was ist der gleiche Fall wie bei? Page = 1 ...

Ich war mit diesem Verhalten vollkommen in Ordnung, aber heute habe ich angefangen, dieses Design in Frage zu stellen. Wie ist die?page=1 case anders als?page=2? Und was mehr ist, wie können Sie feststellen, ob die Anfrage bei der Ausgabe einer HEAD-Anfrage "gültig" war? Gültig im Sinne eines Ergebnisses.

Dies kann hilfreich sein, wenn Sie beispielsweise eine Liste filtern und die Verfügbarkeit eines bestimmten Felds prüfen (z. B. ein @ ausgebenHEAD Anfrage zu/users/?username=ted).

Eine Antwort von 200 würde eindeutig bedeuten, dass die Anfrage verstanden wurde und Elemente gefunden wurden.A 404 würde bedeuten, dass die Anforderung verstanden wurde, aber an dieser Position / URI keine Elemente gefunden wurden (AFAIK, die Abfrageparameter sind auch Teil der URI).Wenn die Anforderung nicht verstanden werden konnte, werden 400 für syntaktische Fehler und 422 für semantische Fehler zurückgegeben.

Ist das ein gutes Design? Warum scheinen die meisten Leute nicht damit einverstanden zu sein und welche Nachteile hat e

Antworten auf die Frage(6)

Ihre Antwort auf die Frage