Wie unterscheidet man 404 zwischen Entität existiert nicht und inkorrekter Endpunkt?

8

Unter Verwendung von REST-Prinzipien wird 404 verwendet, um anzuzeigen, dass eine Entität nicht existiert. Wie können Clients diesen Fall jedoch davon unterscheiden, einen falschen Endpunkt zu treffen?

Ich möchte unterscheiden zwischen "Sie kamen zum richtigen Endpunkt, aber diese Entität existiert nicht" und "Sie sind nicht am richtigen Endpunkt". Technisch kann dies unter Verwendung anderer Antwortcodes, benutzerdefinierter Kopfzeilen usw. unterschieden werden, aber ich beschäftige mich hauptsächlich mit REST-Best-Practices in diesem Bereich, so dass Clients so einfach und standard wie möglich sind.

    
jnorris 04.06.2010, 19:17
quelle

3 Antworten

4
  

Du bist zum richtigen Endpunkt gekommen, aber   diese Entität existiert nicht

Wenn die URL keine Ressource identifiziert, wie könnte sie der richtige Endpunkt sein? Das einzige mögliche Szenario, an das ich denken könnte, ist, dass die Entität gelöscht wurde. In diesem Fall ist 410 Gone die richtige Antwort.

Denken Sie daran, dass, wenn Sie REST-konforme Prinzipien befolgen, die URL vom Server bereitgestellt wurde und wenn ja, warum gibt der Server ungültige URLs aus?

    
Darrel Miller 04.06.2010 20:18
quelle
2

Ich glaube, dass die Bestimmung des korrekten Endpunkts in der alleinigen Verantwortung des REST-Clients liegt. (Natürlich könnte ein Endpunktauflösungsdienst einfach implementiert werden.) Ein 404-Fehler bedeutet nur, dass dieser bestimmte Endpunkt diese bestimmte Entität nicht hostet.

Nichts in RESTful Design erfordert, dass ein Server weiß, ob ein Client mit dem "richtigen" Host interagiert.

    
maerics 04.06.2010 19:39
quelle
1

Unter der Annahme eines solchen Rahmens:

%Vor%


Wenn Sie meinen, dass Sie in der Lage sein möchten, zwischen jemandem zu unterscheiden, der auf /object/members/attributes/incorrect_attribute
trifft (Ein 404 alle richtigen Befehle verwenden, aber versuchen, eine nicht vorhandene Ressource abzurufen)

und jemand trifft /object/members/big-bird
(Angenommen, members kann kein gültiger Endpunkt sein [und dass /object/members/attributes auch kein gültiger Endpunkt ist])
dann glaube ich, dass Sie entweder einen 501 Fehler (nicht implementiert) oder einen 403 Fehler (Forbidden) zurückgeben können, je nachdem, wo Sie die Schuld vergeben wollten. (Alternativ ist 418 (Ich bin eine Teekanne) ist auch hier gültig).

BEARBEITEN:
Schließlich, wenn attribute_n verwendet zu existieren und nicht mehr, könnten Sie mit einer 410 (Ressource weg) antworten.

Siehe: Ссылка

    
Sean Vieira 04.06.2010 19:57
quelle

Tags und Links