Je construis une application avec une API basée sur REST et je suis arrivé au point où je dois spécifier les codes d'état pour chaque demande.
Quel code d'état dois-je envoyer pour les demandes dont la validation échoue ou lorsqu'une demande tente d'ajouter un doublon dans ma base de données ?
J'ai consulté le site http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html mais aucun ne me semble correct.
Existe-t-il une pratique commune pour l'envoi des codes d'état ?
En cas d'échec de la validation des entrées : [400 Bad Request][1] + votre description facultative. Cette méthode est suggérée dans le livre "[RESTful Web Services][2]". Pour une double soumission : 409 Conflit
Mise à jour juin 2014
La spécification pertinente était auparavant la [RFC2616][4], qui définissait l'utilisation de 400 (Bad Request) de manière assez restrictive comme suit
La demande n'a pas pu être comprise par le serveur en raison d'une syntaxe malformée.
Il aurait donc pourrait être argumenté que c'était inapproprié pour les erreurs sémantiques. Mais ce n'est plus le cas ; depuis juin 2014, la norme pertinente [RFC 7231][5], qui remplace la précédente RFC2616, donne l'utilisation de [400 (Bad Request)][6] de façon plus large comme suit
le serveur ne peut pas ou ne peut pas ou ne veut pas traiter la requête à cause de quelque chose qui est perçu comme étant une erreur du client
[1] : http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.1 [2] : https://books.google.com/books?isbn=0596554605
[4] : https://www.ietf.org/rfc/rfc2616.txt [5] : http://tools.ietf.org/html/rfc7231 [6] : https://tools.ietf.org/html/rfc7231#section-6.5.1
Vous devez absolument donner une explication plus détaillée dans les en-têtes et/ou le corps de la réponse (par exemple, avec un en-tête personnalisé - X-Status-Reason : Validation failed
).
Je recommande le [code d'état 422, "Entité non traitable"][1].
11.2. Entité non traitable 422
Le code d'état 422 (Unprocessable Entity) signifie que le serveur comprend le type de contenu de l'entité de demande (le code d'état 415 (Unsupported Media Type) est donc inapproprié) et que la syntaxe de l'entité de demande est correcte (le code d'état 400 (Bad Request) est donc inapproprié), mais qu'il 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.
[1] : http://greenbytes.de/tech/webdav/rfc4918.html#rfc.section.11.2