2012-05-24 19 views
20

così sto sviluppando un'API RESTcodice di stato HTTP 400 vs 412

Quando un POST è fatto per creare una risorsa e un campo obbligatorio manca cosa devo tornare?

400 - Bad Request

O

412 - Precondizione Fallita

e perché?

risposta

28

Utilizzare 400 se i parametri sono errati. Utilizzare 412 se una delle intestazioni come If-Match, If-Modified-Since, ecc. È una delle richieste If-*, ecc.

Perché? Questo è quello che dice RFC. Si veda ad esempio questo estratto di specifica If-Match:

Se nessuno della partita tag entità, o se "*", e di conseguenza esiste nessuna entità corrente, il server NON DEVE eseguire il metodo richiesto, e deve restituire un 412 (Precondition Failed) risposta. Questo comportamento è molto utile quando il client desidera impedire a un metodo di aggiornamento, come PUT, di modificare una risorsa che è stata modificata da quando il client l'ha recuperata per l'ultima volta.

+1

Inoltre, la richiesta non può essere soddisfatta a causa della sintassi non valida per 400. – Rob

+1

Questa pagina mi ha davvero aiutato - http://odino.org/don-t-rape-http-if-none-match-the- 412-http-status-code/- Utilizzando le richieste "PUT" per il contesto, mi è stato più facile capire a cosa serve, poiché è sempre facile abusare di determinati codici di stato. – Charlie

12

412 viene utilizzato quando il server non soddisfa una condizione specificata dal client.

Nel tuo caso dovresti usare un 400. È solo una cattiva richiesta.

Vedere questo link per alcune spiegazioni sulle intestazioni pre-condizione.

L'intestazione Etag è, in genere, una stringa che rappresenta la nostra risorsa nelle intestazioni HTTP. La richiesta di una risorsa con If-Match è un'intestazione HTTP precondizionata . Invia un 412 se non corrisponde a il codice che hai inviato.

If-None-Match indica al server di elaborare un'intera risposta solo se l'Etag è diverso da quello inviato dal client.

+0

Perché il downvote? cosa c'è di sbagliato nella risposta? – nunespascal

+4

Pensa che qualcuno abbia passato una brutta giornata. Basta ignorarlo e lasciare che il sistema faccia il suo lavoro :) – BalusC

+0

Avere un upvote per bilanciare. –

3

È possibile utilizzare il codice di stato 422. Se non si desidera, 400 va bene.

Problemi correlati