Questa è una grande domanda, e ancora molto rilevante dato il contesto storico (e definizioni apparentemente contraddittorie) dei codici di ritorno HTTP. Anche tra le risposte a questa domanda ci sono definizioni contrastanti. Ciò può essere chiarito spostandosi cronologicamente.
RFC 2616 (giugno 1999)
10.4.1 400 Richiesta non valida
La richiesta non è stata compresa dal server a causa di una sintassi non corretta. Il client NON DOVREBBE ripetere la richiesta senza modifiche.
A partire da questo RFC, questo codice di stato si applicava specificamente solo alle richieste sintatticamente non valide. C'era una lacuna nei codici di stato per la convalida semantica. Pertanto, quando è arrivato RFC 4918, è nato un nuovo codice.
RFC 4918 (giugno 2007)
11.2. 422 Entità non elaborabile
Il codice di stato 422 (entità non elaborabile) indica che il server comprende il tipo di contenuto dell'entità richiesta (quindi un codice di stato 415 (tipo di supporto non supportato) è inappropriato) e la sintassi dell'entità richiesta è corretta (quindi un 400 (richiesta non valida) ) il codice di stato non è appropriato) ma non è stato in grado di elaborare le istruzioni contenute. Ad esempio, questa condizione di errore può verificarsi se un corpo di richiesta XML contiene istruzioni XML ben formate (cioè sintatticamente corrette), ma semanticamente errate.
422 Entità non elaborata è stata creata per colmare il divario della convalida semantica nella specifica originale dei codici di stato 4xx. Tuttavia, nel 2014 si è verificato un altro RFC rilevante che ha generalizzato 400 per non essere più specifico della sintassi .
RFC 7231 (giugno 2014, viola esplicitamente RFC 2616)
6.5.1. 400 Richiesta non valida
Il codice di stato 400 (Richiesta non valida) indica che il server non può o non elabora la richiesta a causa di qualcosa che viene percepito come un errore client (ad es. Sintassi della richiesta non valida, framing del messaggio di richiesta non valido o instradamento della richiesta ingannevole).
Si noti che la descrizione 422 indica che il motivo 400 è inappropriato perché 400 (a partire da 2616 RFC) deve essere restituito solo per una sintassi di richiesta errata. Tuttavia, a partire da RFC 7231, la definizione rigorosa di errore di sintassi non si applica più a 400 .
Torniamo alla domanda: mentre 422 è tecnicamente più specifico, dato questo contesto, ho potuto vedere 400 o 422 utilizzati per la convalida semantica dei parametri API. Sono titubante nell'usare 422 nelle mie stesse API perché la definizione di 422 è tecnicamente superata a questo punto (anche se non so se sia ufficialmente riconosciuto da nessuna parte). L'articolo a cui fa riferimento la risposta di Fran che incoraggia l'uso di 422 è stato scritto nel 2012, due anni prima che RFC 7231 chiarisse HTTP 400. Assicurati solo di standardizzare l'uno o l'altro.