web-dev-qa-db-fra.com

REST - Quand utiliser 400 ("Bad Request")

J'ai une ressource comme celle-ci ventes/clients/{customerno}. Si un client envoie une demande PUT à cette ressource, je retournerais 400 - Mauvaise demande si le xml dans le corps de l'entité n'est pas un xml valide. Mais que faire si le xml est valide, mais le contenu du xml n'est pas valide. Dites par exemple que le client essaie de mettre à jour le code postal du client et fournit un code postal qui n'est pas valide. Est-il correct de retourner 400 - Mauvaise requête dans ce cas, ou est-ce un autre code http que j'aurais dû utiliser?

25
rgullhaug

De Liste de Wikipedia des codes d'état HTTP :

400 Mauvaise demande: La demande ne peut pas être satisfaite en raison d'une mauvaise syntaxe.

Dans ce cas, votre client vous a envoyé une charge utile XML qui avait un code postal non valide, qui est une forme de syntaxe non valide; par conséquent, l'envoi d'une 400 Bad Request est un code d'erreur approprié à retourner dans cette situation.

En outre, Wikipedia cite RFC-4918 comme ressource sur ce sujet. Dans ce document, vous trouverez les informations suivantes:

Les serveurs PEUVENT rejeter les demandes douteuses (même si elles consistent en du XML bien formé), par exemple, avec un code de statut 400 (mauvaise demande) et un corps de réponse facultatif expliquant le problème.

Puisque votre demande est bien formée (le XML n'est pas mauvais, il contient juste des informations sémantiquement incorrectes) vous mai rejetez le contenu avec le code de statut 400. Le mot *may* suggère qu'il existe d'autres options.

Bien que vous puissiez être tenté d'utiliser le code d'état 422, cela ne serait pas correct dans cette situation, car le code postal non valide ne répond pas aux critères pour être une erreur sémantique. Lire ci-dessous...

De Wikipédia:

422 Entité non traitable (WebDAV; RFC 4918) : la demande était bien formée mais n'a pas pu être suivie en raison d'erreurs sémantiques.

En outre, voici quelques définitions pour aider à l'interprétation du code de statut 422 :

  • Les erreurs de syntaxe se produisent lors de l'analyse du code d'entrée et sont causées par des instructions grammaticalement incorrectes. Les erreurs typiques peuvent être un caractère illégal dans l'entrée, un opérateur manquant, deux opérateurs consécutifs, deux instructions sur la même ligne sans point-virgule, des parenthèses déséquilibrées, un mot réservé mal placé, etc.

  • Des erreurs sémantiques se produisent lors de l'exécution du code, après qu'il a été analysé comme grammaticalement correct. Celles-ci n'ont pas à voir avec la façon dont les déclarations sont construites, mais avec ce qu'elles signifient. Des choses telles que des types ou des tailles de variables incorrectes, des variables inexistantes, des indices hors plage et similaires, sont des erreurs sémantiques.

Votre code postal invalide n'est ni une erreur de syntaxe ni une erreur sémantique; ainsi, il est raisonnable d'exclure le code d'état 422 en option.

Pour répondre à votre question, le code de statut 400 est approprié; cependant, vous pouvez également avoir d'autres options.

31
jmort253

La version révisée de la spécification HTTP trouvée ici a mis à jour la formulation pour essayer d'éviter cette confusion à propos de 400 se limitant à des requêtes malformées.

7.4.1. 400 Mauvaise demande

Le serveur ne peut pas ou ne traitera pas la demande, en raison d'une erreur client (par exemple, une syntaxe mal formée).

17
Darrel Miller