Je suis en train de créer une API RESTful qui traitera un certain nombre d'interactions avec les utilisateurs, notamment le passage de commandes à l'aide de cartes de crédit enregistrées.
Dans le cas d'une commande réussie, je renvoie un 200 OK, et dans le cas où la demande de commande est mal formée ou invalide, je renvoie un 400 Bad Request. Mais que dois-je renvoyer s'il y a un problème pendant le traitement de la commande ?
- Le client POSTE un ordre au serveur pour une ressource utilisateur. Si l'utilisateur n'existe pas, 404 Not Found est retourné.
- Le format et les informations de la commande sont validés. Si elles ne sont pas valides, le système renvoie le message 400 Bad Request.
- La commande est traitée. Si la commande est réussie, un 201 Created est renvoyé pour la commande. Si une erreur inattendue est rencontrée, une erreur de serveur 500 est renvoyée.
C'est la dernière étape qui pose problème : que dois-je renvoyer si la commande n'aboutit pas pour une autre raison ? Voici quelques scénarios possibles :
- Le produit est épuisé
- Limite maximale d'ordre de l'utilisateur atteinte
- Échec de la transaction par carte de crédit (fonds insuffisants, etc.)
Cela ne semble pas être approprié pour un 400 ou un 500. Je pourrais même le voir comme un 400 s'il n'y a pas de meilleur code - la demande n'était pas valide selon les règles de l'entreprise. Mais cela ne semble pas exact.
Edit : Aussi trouvé cette discussion existante du même sujet. Toutes les réponses semblent indiquer l'utilisation de codes d'état pour ce type de violation, avec une discussion entre l'utilisation de 400, 409 ou l'extension 422.