Je crée une API RESTful qui traitera un certain nombre d'interactions utilisateur, y compris la passation de commandes à l'aide de cartes de crédit stockées.
Dans le cas d'une commande réussie, je retourne un 200 OK, et dans le cas où la demande de commande est mal formée ou invalide, je retourne une 400 Bad Request. Mais que dois-je retourner en cas de problème lors du traitement proprement dit de la commande?
- Le client POST une commande au serveur pour une ressource utilisateur. Si l'utilisateur n'existe pas, 404 Not Found est renvoyé.
- Le format et les informations de la commande sont validés. Si non valide, 400 Bad Request est renvoyé.
- La commande est traitée. Si la commande est réussie, un 201 Created est retourné pour la commande. Si une erreur inattendue se produit, une erreur de serveur 500 est renvoyée.
La dernière étape est le problème - que dois-je retourner si la commande ne se termine pas pour une autre raison? Les scénarios possibles pourraient inclure:
- Le produit est épuisé
- Limite de commande maximale de l'utilisateur atteinte
- Échec de la transaction par carte de crédit (fonds insuffisants, etc.)
Cela ne semble pas approprié pour un 400 ou un 500. Si quoi que ce soit, je pourrais le voir comme un 400 s'il n'y a pas de meilleur code - la demande était invalide selon les règles métier. Cela ne semble tout simplement pas exact.
Edit: a également trouvé cette discussion existante sur le 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 l'extension 400, 409 ou 422.