C'est une excellente question, qui reste très pertinente compte tenu du contexte historique (et des définitions apparemment contradictoires) des codes de retour HTTP. Même parmi les réponses à cette question, il y a des définitions contradictoires. Cela peut être clarifié en se déplaçant chronologiquement.
RFC 2616 (juin 1999)
10.4.1 400 mauvaise demande
La requête n'a pas pu être comprise par le serveur en raison d'une syntaxe mal formée. Le client NE DEVRAIT PAS répéter la demande sans modifications.
À partir de cette RFC, ce code d'état ne s'appliquait spécifiquement qu'aux requêtes syntaxiquement non valides. Il y avait une lacune dans les codes d'état pour la validation sémantique. Ainsi, lorsque la RFC 4918 est apparue, un nouveau code est né.
RFC 4918 (juin 2007)
11.2 422 entités non traitables
Le code d’état 422 (entité non traitable) signifie que le serveur comprend le type de contenu de l’entité de demande (par conséquent, un code d’état 415 (type de support non supporté) est inapproprié), et la syntaxe de l’entité de demande est correcte (donc, une requête 400 (requête incorrecte)). ) 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 demande XML contient des instructions XML bien formées (c'est-à-dire syntaxiquement correctes), mais sémantiquement erronées.
422 Entité non traitable a été créée pour combler le vide de la validation sémantique dans la spécification d'origine des codes d'état 4xx. Cependant, une autre RFC pertinente est apparue en 2014, généralisant 400 pour ne plus être spécifiques à la syntaxe .
RFC 7231 (juin 2014, obsolète explicitement le RFC 2616)
6.5.1. 400 mauvaise demande
Le code d’état 400 (demande incorrecte) indique que le serveur ne peut pas ou ne veut pas traiter la demande en raison d’une erreur perçue par le client (syntaxe de demande malformée, cadrage incorrect du message de demande ou acheminement trompeur de demande).
Notez que la description 422 indique que la raison 400 n'est pas appropriée, car 400 (à partir de la RFC 2616) doit être renvoyé uniquement pour une syntaxe de requête incorrecte. Cependant, à partir de la RFC 7231, la définition d'erreur de syntaxe stricte ne s'applique plus à 400 .
Revenons à la question: Si 422 est techniquement plus spécifique, dans ce contexte, je pourrais voir que 400 ou 422 sont utilisés pour la validation sémantique des paramètres API. J'hésite à utiliser 422 dans mes propres API car la définition de 422 est techniquement obsolète pour le moment (bien que je ne sache pas si c'est officiellement reconnu nulle part). L'article référencé dans la réponse de Fran qui encourage l'utilisation de 422 a été écrit en 2012, deux ans avant que la RFC 7231 clarifie HTTP 400. Veillez simplement à uniformiser l'un ou l'autre.