Ich habe den folgenden Endpunkt:
a/{id}/b
und möchten eine b
mit sendende POST
Anfrage an sie erstellen . Wenn a
mit gegeben {id}
nicht gefunden wird, soll ich mit 404 NOT_FOUND
oder vielleicht mit antworten 409 CONFLICT
?
Es ist einfach zu handhaben a/{id}
, der Trick ist, dass hier eine Unterressource verwendet wird.
rest
api
api-design
http-request
Opal
quelle
quelle
Antworten:
404 NOT FOUND
scheint die richtige Antwort zu sein, da die Ressource mit dieser ID nicht vorhanden ist. Es ist sehr klar zu verstehen und Sie erwarten die gleiche Antwort, wenna/{id}
aufgerufen wird.409 CONFLICT
scheint mir nicht die bessere Wahl zu sein, da Sie in Ihrem Beispiel eine 409 zurückgeben, wenn die übergeordnete Ressource nicht gefunden wurde :).Denken Sie jedoch daran, dass das Wichtigste darin besteht, in Ihrer API konsistent zu sein
quelle
id
) übergeben wurde, ist er 404. Wenn der Ordner jedoch im Hauptteil übergeben wurde, kann dies alles andere sein (412, 422 ... etwas, das "Validierung fehlgeschlagen: Ordner tut dies" darstellt existiert nicht"). Es ist eine gute Frage zu stellen und zu diskutieren.Zusätzlich zu @ Dheriks Antwort.
URIs sind Bezeichner , daher müssen wir berücksichtigen, dass (
/a/{id}/b
ein Bezeichner ist). Der URI ist für das WWW und für den HTTP-Client bedeutungslos.404 ist die richtige Antwort . Im Wesentlichen antwortet der Server
Ob die fehlende Ressource übergeordnet oder untergeordnet ist, spielt keine Rolle.
Wir Entwickler sehen Hierarchien und Pfade in der URI, HTTP-Clients jedoch nicht. Mit anderen Worten, HTTP soll nur von HTTP-Clients interpretiert werden, nicht jedoch von Menschen (Entwicklern, Endbenutzern usw.).
Fragen Sie im Zweifelsfall nicht, welcher Code für Sie (Mensch) sinnvoll ist. Fragen Sie, welcher Code für den HTTP-Client sinnvoll ist. Wie soll sich der HTTP-Client verhalten?
Warum? Weil ein Statuscode diese Clients dazu veranlasst, bestimmte Vorgänge auszuführen. Zum Beispiel 302 . Mit diesem Code können Webbrowser normalerweise zu einem bestimmten Speicherort (URI) umleiten, der in den Antwortheadern angegeben ist.
Dies ist möglicherweise nicht Ihr Fall, aber es ist wichtig, sich dessen bewusst zu sein. Letztendlich werden HTTP-Statuscodes an HTTP-Clients adressiert. Nicht zu unseren Anwendungen. Nicht an Personen.
1: 409 wird selten als Navigationsfehler implementiert. In der Regel werden Remote-Vorgänge ausgeführt (Löschen, Aktualisieren, Neu usw.). Aber die URI sollte existieren. Andernfalls wird sich 404 durchsetzen
quelle