2012-05-24 11 views
20

So entwickeln ich eine REST-APIHTTP-Statuscode 400 vs 412

Wenn ein POST wird eine Ressource und ein erforderliches Feld erstellen fehlt, was soll ich zurückkehren?

400 - Bad Request

ODER

412 - Vorbedingung nicht erfüllt

und warum?

Antwort

28

Verwenden Sie 400, wenn die Anforderung Parameter falsch sind. Verwenden Sie 412, wenn eine der If-* Anfrage Header wie If-Match, If-Modified-Since, usw. falsch sind.

Warum? Genau das sagt RFC. Siehe zum Beispiel diesen Extrakt von If-Match Spezifikation:

Falls keine der Entität-Tags übereinstimmen, oder wenn „*“ gegeben ist und kein Strom Einheit existiert, muss der Server die angeforderten Verfahren durchführen und muss eine 412 zurückkehren (Vorbedingung fehlgeschlagen) Antwort. Dieses Verhalten ist am nützlichsten, wenn der Client verhindern möchte, dass eine Aktualisierungsmethode wie PUT eine Ressource ändert, die sich geändert hat, seit der Client sie zuletzt abgerufen hat.

+1

Es gibt auch an, dass die Anfrage aufgrund falscher Syntax für 400 nicht erfüllt werden konnte. – Rob

+1

Diese Seite hat mir wirklich geholfen - http://odino.org/don-t-rape-http-if-none-match-the- 412-http-status-code/- Die Verwendung von 'PUT'-Anfragen für den Kontext erleichterte es mir zu verstehen, wofür es gedacht ist, da es immer leicht ist, bestimmte Statuscodes zu missbrauchen. – Charlie

12

412 wird verwendet, wenn Ihr Server eine vom Client angegebene Bedingung nicht erfüllt.

In Ihrem Fall sollten Sie eine 400 verwenden. Es ist nur eine schlechte Anfrage.

Sehen Sie diese link für einige Erläuterungen zu Vorsatzköpfen.

Der Etag-Header ist im Allgemeinen eine Zeichenfolge, die unsere Ressource in den HTTP-Headern darstellt. Sie fragen nach einer Ressource mit einem If-Match ist ein 0.präkonditionaler HTTP-Header. Es wird eine 412 senden, wenn es nicht den Code entspricht, den Sie gesendet haben.

If-None-Match weist den Server an, nur dann eine ganze Antwort zu verarbeiten, wenn sich das Etag von dem vom Client gesendeten unterscheidet.

+0

Warum der Downvote? Was stimmt nicht mit der Antwort? – nunespascal

+4

Denken Sie, jemand hatte einen schlechten Tag. Ignorieren Sie es einfach und lassen Sie das System seine Arbeit machen :) – BalusC

+0

Haben Sie eine Aufwertung, um es auszugleichen. –

3

Sie könnten den Statuscode 422 verwenden. Wenn Sie nicht möchten, ist 400 in Ordnung.