Secondo lo scenario seguente,
Diciamo che qualcuno fa una richiesta al tuo server con dati nel formato corretto, ma semplicemente non sono dati "buoni". Ad esempio, immagina che qualcuno abbia pubblicato un valore String su un endpoint API che prevedesse un valore String; ma il valore della stringa conteneva dati che erano nella lista nera (es. impedire alle persone di usare "password" come password). quindi il codice di stato potrebbe essere 400 o 422?
Fino ad ora, avrei restituito una "400 richiesta non valida", che, secondo w3.org, significa:
La richiesta non è stata compresa dal server a causa di una sintassi non corretta. Il client NON DOVREBBE ripetere la richiesta senza modifiche.
Questa descrizione non si adatta perfettamente alla circostanza; ma, se si passa dall'elenco dei codici di stato HTTP di base definiti nel protocollo HTTP / 1.1, è probabilmente la soluzione migliore.
Di recente, tuttavia, qualcuno del mio team Dev ha sottolineato [per me] che le API popolari stanno iniziando a utilizzare le estensioni HTTP per ottenere informazioni più dettagliate sulla segnalazione degli errori. In particolare, molte API, come Twitter e Recurly, utilizzano il codice di stato "422 entità non elaborabile" come definito nell'estensione HTTP per WebDAV. Il codice di stato HTTP 422 afferma:
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.
Tornando al nostro esempio di password dall'alto, questo codice di stato 422 sembra molto più appropriato. Il server capisce cosa stai cercando di fare; e comprende i dati che stai inviando; semplicemente non consentirà che tali dati vengano elaborati.