2012-07-04 3 views
6

Was sind geeignete Antwortcodes und Meldungen zu unterscheiden:HTTP-Response-Codes zwischen falsche Parameter und andernfalls Werte

  1. Felder übermittelt die falsche Art und Weise (URL-Parameter vs Körper) oder fehlende Felder
  2. Felder auf ungültige Werte (string anstelle von Zahlen, Zeitstempel in Zukunft)
  3. einige Zeichen wie ?, / Pause Sachen in der URL-Parameter
  4. Tatsächliche Ausfälle: ungültige Anmeldeinformationen, Wiederholung bereits getan Aktion

Derzeit verwenden wir 400 für alle.

Antwort

6

Fälle 1, 2 und 3 in Ihrer Frage sind im Wesentlichen syntaktischer Fehler in der Anforderung

=>400 Bad Request

(RFC 2616 sagt: könnte Die Anforderung vom Server nicht verstanden werden, . aufgrund ungültiger Syntax)

As 4 Fall:

ein. Ungültige Anmeldeinformationen

=>401 Unauthorized

b. Wiederholen von bereits gemachte Aktion

=>403 Forbidden

(Die RFC sagt: Der Server hat die Anforderung verstanden, aber weigert sich, sie zu erfüllen Authorization wird nicht helfen, und die Anforderung wiederholt werden, sollten Sie nicht..)

Aber dann 409 Conflict und 410 gegangenes Sinn, wenn Sachen versuchen, falsch zu ändern (PUT) oder Ressourcen bereits gelöscht Zugriff sind.

Und hier ist RFC 2616 Section 10.

3

Lesen Sie die HTTP-Spezifikation für jeden Antwortcode, um Informationen darüber zu erhalten, was im Antworttext zurückgegeben werden soll. 4xx sagt zum Beispiel "Außer wenn auf eine HEAD-Anfrage reagiert wird, SOLLTE der Server eine Repräsentation enthalten, die eine Erklärung der Fehlersituation enthält, und ob es sich um eine temporäre oder permanente Bedingung handelt."

Der wichtigste Punkt, den Sie beachten sollten, ist, dass die HTTP-Antwortcodes einheitlich gestaltet sind und daher viel mehr mit der Förderung der Interoperabilität zu tun haben als die detaillierten Anforderungen einzelner Anwendungen. Verwenden Sie den Antworttext, nicht den Code, um winzige Details in einem Format darzustellen, das von Ihren Kunden erwartet wird.

1 Felder vorgelegt in die falsche Richtung (URL-Parameter vs Körper) oder fehlende Felder

Return "404 Not Found". Querystring-Parameter sind Teil des URI und dienen zur Identifizierung einer Ressource./foo/bar?a=1&b=2 identifiziert eine andere Ressource als foo/bar. Wenn die Ressource nicht vorhanden ist, geben Sie 404 zurück. Es spielt keine Rolle, dass die gleiche Logik in Ihrem Code verwendet wird, um Querystring-Parameter für denselben Pfad zu behandeln: Diese Details sind absichtlich hinter der einheitlichen Schnittstelle verborgen. Weitere Informationen finden Sie unter the URI spec.

2 Felder ungültige Werte erhalten (string anstelle von Zahlen, Zeitstempel in Zukunft)

400 ist am besten hier, es sei denn, die Ressource in einem Zustand, der mit der Bitte, die vernünftigerweise der Benutzer in Konflikt ist sein könnte lösen kann, in welchem ​​Fall Rückkehr 409.

3 einige Zeichen wie?,/Pause Sachen in der URL-Parameter

012 (die Anfrage und dann erneut einreichen)

Wenn dieser Fehler darauf zurückzuführen ist, dass Ihr Server reservierte Zeichen in der querystring-Komponente nicht korrekt verarbeitet, geben Sie 500 zurück. Wenn der Client einen ungültigen Request-URI gesendet hat, geben Sie 400 zurück. Wenn der URI eine Ressource identifiziert, die der Server nicht verarbeitet, kehren Sie zurück 404.

4 Tatsächliche Ausfälle: ungültige Anmeldeinformationen, Wiederholung bereits getan Aktion

ungültige Anmeldeinformationen sollten in "401 Unauthorized" zur Folge haben. Das Wiederholen einer Aktion, die bereits ausgeführt wurde, sollte 200 OK ergeben (oder eine Weiterleitung usw.), wenn die Anfrage-Methode idempotent (GET, HEAD, PUT, DELETE) ist. Beim POST hängt das Wiederholen einer Aktion vollständig von der Art der Aktion ab, und es kann praktisch jeder Statuscode zurückgegeben werden. 400/409 ist üblich, aber viele solcher Ressourcen führen einfach die Aktion erneut aus, was oft wünschenswert ist.

+0

+1. Ein 404 für seltsame URLs klingt sinnvoll. – ArjunShankar