Selon le scénario ci-dessous,
Disons que quelqu'un fait une demande à votre serveur avec des données au format correct, mais qui ne sont tout simplement pas de «bonnes» données. Par exemple, imaginez que quelqu'un ait publié une valeur String sur un point de terminaison d'API qui attendait une valeur String; mais, la valeur de la chaîne contenait des données qui étaient sur la liste noire (ex. empêchant les gens d'utiliser "mot de passe" comme mot de passe). alors le code d'état pourrait être 400 ou 422?
Jusqu'à présent, j'aurais renvoyé une "400 Bad Request", ce qui, selon le w3.org, signifie:
La demande n'a pas pu être comprise par le serveur en raison d'une syntaxe incorrecte. Le client NE DEVRAIT PAS répéter la demande sans modifications.
Cette description ne correspond pas tout à fait aux circonstances; mais, si vous consultez la liste des codes d'état HTTP de base définis dans le protocole HTTP / 1.1, c'est probablement votre meilleur pari.
Récemment, cependant, un membre de mon équipe de développement m'a fait remarquer que les API populaires commencent à utiliser des extensions HTTP pour obtenir plus de précision dans leurs rapports d'erreurs. Plus précisément, de nombreuses API, comme Twitter et Recurly, utilisent le code d'état "422 Entité non traitable" tel que défini dans l'extension HTTP pour WebDAV. Le code d'état HTTP 422 indique:
Le code d'état 422 (Unprocessable Entity) signifie que le serveur comprend le type de contenu de l'entité de demande (donc un code d'état 415 (Unsupported Media Type) est inapproprié) et que la syntaxe de l'entité de demande est correcte (donc un 400 (Bad Request ) le code d'état est inapproprié) mais n'a pas pu traiter les instructions contenues. Par exemple, cette condition d'erreur peut se produire si un corps de requête XML contient des instructions XML bien formées (c'est-à-dire syntaxiquement correctes), mais sémantiquement erronées.
Pour revenir à notre exemple de mot de passe ci-dessus, ce code d'état 422 semble beaucoup plus approprié. Le serveur comprend ce que vous essayez de faire; et il comprend les données que vous soumettez; il ne permettra tout simplement pas que ces données soient traitées.