Quel code de réponse / statut dois-je envoyer à une demande AJAX en cas d’erreur de validation utilisateur / formulaire?

Je crée une fonctionnalité de mon application Web dans laquelle un utilisateur peut “éditer sur place” un enregistrement et soumettre le formulaire via AJAX à l’aide de jQuery.

Lorsque quelqu’un “ajaxance” un enregistrement et qu’il soumet le formulaire avec des données valides, j’envoie un code d’état 200 qui déclenche la fonction jQuery AJAX Success, puis ignore le corps de la réponse (puisqu’il a réussi, je n’en ai pas besoin ) et réduisez le formulaire.

Lorsqu’il y a des erreurs de validation de formulaire, j’envoie un code d’état 400 afin de déclencher la méthode d’erreur jQuery. Dans le corps de la demande, je spécifie quels champs n’ont pas été validés.

Dans une question précédente de StackOverflow, quelqu’un a mentionné qu’il “semblait étrange” d’envoyer un code d’état 400 et de travailler avec le corps de la réponse. Est-ce que mon approche n’est pas une meilleure pratique? Que recommanderiez-vous que je fasse dans cette situation?

Utiliser la charge utile d’un code d’état 4xx est très bien. Rien dans la spécification HTTP ne dit le contraire.

Si vous voulez quelque chose de plus spécifique que 400, consultez 422 Entités non traitables .

Pour moi, les codes d’état HTTP sont destinés à la signalisation au niveau de la couche HTTP, pas à la couche application. Je dirais que la réponse appropriée aux données incorrectes correctement soumises (si vous voyez ce que je veux dire) est un 200 avec un code d’erreur de couche d’application. J’utilise JSON pour cela. Mes demandes reçoivent toujours un petit message JSON, qui comporte toujours un indicateur indiquant le succès / l’échec au niveau de l’application. Mes wrappers pour les appels ajax en sont informés et sont envoyés le cas échéant.

Je retournerais 200 avec une page d’erreur (d’application) ou la page d’origine avec une option d’erreur, ce qui déclenche un volet informatif avec la description de l’erreur.

La raison en est que les codes d’erreur HTTP correspondent à la réponse du navigateur au serveur Web, pas à votre application Web. Gardez la logique de votre application distincte de ce qui se passe lorsque le navigateur et le serveur se parlent.