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
Ich habe keine Ressource mit einer solchen ID gefunden. Ressource nicht gefunden
1
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