13 Stimmen

Wie unterscheidet man zwischen einem 404-Fehler, wenn die Entität nicht existiert und wenn der Endpunkt falsch ist?

Unter Verwendung von REST-Prinzipien scheint der 404-Fehler verwendet zu werden, um anzuzeigen, dass eine Entität nicht vorhanden ist. Wie können Clients jedoch diesen Fall von einem falschen Endpunkt unterscheiden?

Ich möchte unterscheiden zwischen "Sie sind am richtigen Endpunkt, aber diese Entität existiert nicht" und "Sie sind nicht am richtigen Endpunkt". Technisch gesehen kann dies mithilfe anderer Antwortcodes, benutzerdefinierter Header usw. unterschieden werden, aber ich bin hauptsächlich besorgt über die REST-Best Practices auf diesem Gebiet, damit die Clients so einfach und standardisiert wie möglich sind.

2voto

maerics Punkte 141984

Ich glaube, dass die Ermittlung des richtigen Endpunkts die alleinige Verantwortung des REST-Clients ist. (Natürlich könnte ein Endpunkt-Auflösungsdienst leicht implementiert werden.) Ein 404-Fehler bedeutet nur, dass dieser bestimmte Endpunkt diese bestimmte Entität nicht hostet.

In der RESTful-Entwicklung erfordert nichts, dass ein Server weiß, ob ein Client mit dem "richtigen" Host interagiert.

2voto

Darrel Miller Punkte 133891

Du hast den richtigen Endpunkt erreicht, aber diese Entität existiert nicht

Wenn keine Ressource durch die URL identifiziert wird, wie kann es dann der richtige Endpunkt sein? Das einzige mögliche Szenario, das mir einfällt, ist, dass die Entität gelöscht wurde, in diesem Fall ist die richtige Antwort 410 Gone.

Vergiss nicht, dass, wenn du RESTful-Prinzipien befolgst, die URL vom Server bereitgestellt werden sollte und falls ja, warum gibt der Server ungültige URLs heraus?

1voto

Sean Vieira Punkte 147654

Vorausgesetzt, ein Rahmen wie folgt dargelegt:

/ -- Wurzel
|____+
     /Objekt
     |____+
          /Mitglieder
          |____+
               /Attribute
               |____+
                    /Eigenschaft_1
                    /Eigenschaft_2
                    ...
                    /Eigenschaft_n

 
Wenn Sie damit meinen, dass Sie zwischen jemandem unterscheiden möchten, der auf
/Objekt/Mitglieder/Attribute/falsche_attribut
(ein 404, der alle richtigen Befehle verwendet, aber versucht, eine nicht vorhandene Ressource abzurufen)
und jemandem, der auf /Objekt/Mitglieder/großer-vogel
(Vorausgesetzt, dass Mitglieder kein gültiger Endpunkt für sich allein sein kann
[und dass /Objekt/Mitglieder/Attribute ebenfalls kein gültiger Endpunkt ist])
dann glaube ich, dass Sie entweder einen 501 Fehler (nicht implementiert) oder einen 403 Fehler (Verboten) zurückgeben könnten, je nachdem, wo Sie die Schuld platzieren möchten. (Alternativ ist auch ein 418 (Ich bin eine Teekanne) hier gültig).

BEARBEITEN:
Schließlich, wenn Eigenschaft_n früher existierte und nicht mehr vorhanden ist, könnten Sie mit einem 410 (Ressource weg) antworten.

Siehe: http://en.wikipedia.org/wiki/List_of_HTTP_status_codes

0voto

badunius Punkte 31

Laut Wikipedia Seite der HTTP-Statuscodes

400 Bad Request

Der Server kann die Anfrage nicht verarbeiten oder wird dies nicht tun aufgrund eines offensichtlichen Clientfehlers (z.B. fehlerhafte Anforderungssyntax, zu große Größe, ungültige Anforderungsnachrichtenstruktur oder täuschende Anforderungsweiterleitung)

Persönlich bleibe ich dabei - du, der Client, hast eine schlechte Anfrage gestellt, und du solltest dich schlecht deswegen fühlen =)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X