2016-08-08 77 views
2

Welcher HTTP-Statuscode wird als Antwort auf HTTP GET für eine Ressource verwendet, die beschädigt oder semantisch ungültig ist? B. eine Anfrage an GET /person/1234, wo Daten für die Personen-ID 1234 auf dem Server existieren, aber gegen eine Geschäftsregel verstoßen, so dass der Server es nicht verwenden will.REST-Antwortcode für den Zugriff auf eine beschädigte/ungültige Ressource

  • 404 gilt nicht (weil die Daten tatsächlich vorhanden sind).
  • 4xx im Allgemeinen scheint nicht ideal (weil das Problem auf dem Server-Ende ist, nicht unter der Kontrolle des Kunden).
  • 503 scheint für den Dienst als Ganzes zu gelten, nicht eine bestimmte Ressource.
  • 500 passt sicherlich, aber es ist sehr vage, dem Kunden zu sagen, was falsch sein könnte.

Irgendwelche Vorschläge?

+1

IMO, würde 500 am besten passen. Aber wenn Sie auf die Spezifikation schauen, werden Sie nichts finden, was eindeutig mit korrupter/ungültiger Ressource in Verbindung gebracht würde, wie Sie es beschreiben. 5xx ist serverseitiger Fehler, ohne zu unterscheiden, was tatsächlich schiefgelaufen ist ... –

+0

Interessante Frage ... –

+0

Bitte klarstellen * verstößt gegen einige Geschäftsregeln *. –

Antwort

0

Nach dem Lesen der Kommentare und die verknüpften Ressourcen, es sieht aus wie @ RemyLebeau Ansatz am besten ist:

ich denke, 500 ist die einzige offizielle Wieder sponse Code, der zu dieser Situation passt. Und nichts hindert Sie daran, eine Antwortstelle einzubeziehen, die den Grund für den Fehler beschreibt.

0

nach iana.org:

4xx: Client Error - The request contains bad syntax or cannot be fulfilled 
5xx: Server Error - The server failed to fulfill an apparently valid request 

Ich denke, keiner des 4xx Statuscode sollte als Antwort auf einen internen Serverfehler oder Migration oder ... gültig, wenn Kunde keine Verantwortung hat oder wo Benutzer Eingaben werden voraussichtlich erneut überprüft. es sei denn, die vorgefüllten Daten des Benutzers sind involviert, wie das Paket des Benutzers es ihm nach einem vorher festgelegten und bekannten Datum nicht erlaubt, auf diese Daten zuzugreifen. In diesem speziellen Fall kann es ein 403 Forbidden sein, wie @Bari vorgeschlagen hat.

Ich bin kein Experte, aber ich denke, wenn die Ablehnung oder die Entscheidung, Endpunktdaten als beschädigt oder ungültig zu betrachten, vom Server gemacht wird, dann hängt es davon ab, was als nächstes getan werden soll. Ich sehe mögliche Fälle:

1. Es wird erwartet, dass dies irgendwie fixiert werden soll und Client sollte aufgefordert werden, zurück zu verlangen, sondern zu einem späteren Zeitpunkt ==>503 (Service Unavailable):

503 (Service Unavailable) 

    status code indicates that the server 
    is currently unable to handle the request due to a temporary overload 
    or scheduled maintenance, which will likely be alleviated after some 
    delay. The server MAY send a Retry-After header field 
    (Section 7.1.3) to suggest an appropriate amount of time for the 
    client to wait before retrying the request. 

2. Etwas ist falsch, es ist nicht die Verantwortung Client, aber es gibt eine alternative Möglichkeit, auf Daten zuzugreifen, vielleicht einen bestimmten Prozess folgenden oder weitere Details zu senden ==>510 Not Extended

2. Der Server kann die Anforderung nicht erfüllen, aber es gibt einen alternativen Weg, der weitere Details erfordert. Beispiel: Wenn die angeforderten Daten beschädigt sind, kann die Serverfehlerantwort eine Liste älterer (oder nicht gespeicherter, unversionierter) Versionen enthalten und erwarten, dass der Client genauer angibt, welche Version ausgewählt werden soll, damit er abgerufen werden kann beschädigte ein ==>510 Not Extended

510 Not Extended 

    The policy for accessing the resource has not been met in the 
    request. The server should send back all the information necessary 
    for the client to issue an extended request. It is outside the scope 
    of this specification to specify how the extensions inform the 
    client. 

    If the 510 response contains information about extensions that were 
    not present in the initial request then the client MAY repeat the 
    request if it has reason to believe it can fulfill the extension 
    policy by modifying the request according to the information provided 
    in the 510 response. Otherwise the client MAY present any entity 
    included in the 510 response to the user, since that entity may 
    include relevant diagnostic information. 
  • Fall wurde aktualisiert, ein Beispiel enthalten, wie IMHO es in einem solchen Fall passen.aber auch hier bin ich nicht jeder Fachmann und ich kann falsch darüber

3.en keine alternativen Möglichkeiten, nichts zu erwarten oder keiner der anderen Fälle ==>500 sollte gut sein

500 (Internal Server Error) 

    status code indicates that the server 
    encountered an unexpected condition that prevented it from fulfilling 
    the request. 
+0

Ich konnte sehen, wie 503 * dafür * verwendet werden kann, * wenn * die Daten für zukünftige Anfragen korrigiert werden können. Aber ich glaube nicht, dass 510 passt, da eine benutzerdefinierte Erweiterung nicht für den Zugriff auf die Ressource verwendet wird. Ich würde bei 500 bleiben mit einer Antwortstelle, die den Fehler beschreibt. –

+0

Was ich von [this] verstanden habe (https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#510) ist, dass eine weitere Erweiterung der Anfrage selbst erforderlich ist, damit der Server sie erfüllen kann. Zum Beispiel kann die Server-Fehlerantwort eine Liste der älteren Arbeitsversionen dieser beschädigten Daten enthalten und erwarten, dass Sie die gleiche Anfrage zurücksenden, die angibt, welche ältere Version von Ihnen benötigt wird, damit beschädigte Daten ersetzt oder einfach abgerufen werden können. Was denkst du @RemyLebeau? passt dieser Fall nicht in den Kontext eines 510-Statuscodes? –