422 Unprocessable Entité est le bon code d'état HTTP de votre cas d'utilisation.
Plusieurs cadres de l'utilisation de 400 Bad Request; ils le font de manière incorrecte. Pour citer la RFC 2616 (l'emphase est mienne):
La demande ne peut pas être comprise par le serveur en raison de la malformation de la syntaxe.
La demande que vous décrivez est syntaxiquement valide JSON enfermé dans syntaxiquement valide l'adresse HTTP. Le serveur n'a pas de problèmes avec la syntaxe de la requête.
L'introduction de la RFC 4918 dit:
Alors que l'état les codes fournis par HTTP/1.1 sont suffisantes pour
décrire la plupart des conditions d'erreur rencontrées par WebDAV méthodes, il y
certaines erreurs qui n'entrent dans les catégories existantes.
Cette spécification définit extra codes de statut élaboré pour WebDAV
méthodes (Section 11)
Cela semble beaucoup comme une erreur qui n'est pas "entrent dans les catégories existantes" comme décrit dans la RFC 2616.
En regardant la description de l' 422
:
Les 422 (Unprocessable Entité) code du statut signifie que le serveur
comprend le type de contenu de la demande de l'entité (d'où une
415(Unsupported Media Type) code d'état est inapproprié), et le
la syntaxe de l'entité de la requête est correcte (donc un 400 (Bad Request)
le code d'état est inapproprié), mais a été incapable de traiter le contenu de l'
les instructions.
Cela sonne exactement comme votre situation, mais juste au cas où il n'y avait aucun doute, c'est-à-dire:
Par exemple, cette condition d'erreur peut se produire si un XML
du corps de la requête contient bien formé (c'est à dire, syntaxiquement correctes), mais
sémantiquement erronée, instructions XML.
(Remplacer "XML" avec "JSON" et je pense que nous pouvons convenir à votre situation)
Maintenant, certains objecteront que la RFC 4918 est sur "Extensions HTTP pour le Web Distributed Authoring and Versioning (WebDAV)" et que vous avez (sans doute) sont à ne rien faire de impliquant WebDAV et donc ne devrait pas utiliser des choses.
Étant donné le choix entre l'utilisation d'un code d'erreur dans la norme d'origine explicitement ne couvre pas votre situation, et une extension qui décrit la situation exactement, je choisirais ce dernier.
En outre, RFC 4918 Article 21.4 se réfère à l' IANA Protocole de Transfert Hypertexte (HTTP) Code d'État du Registre, où 422 peut être trouvé.
Je propose qu'il est totalement raisonnable pour un client HTTP ou serveur à utiliser tous les codes de statut à partir de ce registre, aussi longtemps qu'ils le font correctement.