web-dev-qa-db-fra.com

Codes d’état appropriés pour les réponses JSON aux appels Ajax?

Mon projet renvoie des appels JSON à Ajax à partir du navigateur. Je me demande quel est le code de statut approprié pour renvoyer les réponses à des soumissions de données non valides (mais traitées avec succès).

Par exemple, jQuery a les deux callbacks suivants lors des requêtes Ajax:

success: déclenché lorsqu'un code d'état 200/2xx est remis avec la réponse.

error: déclenché lorsque les codes d'état 4xx, 5xx, etc., sont renvoyés avec la réponse.

Si un utilisateur tente de créer un nouvel objet "Personne", j'envoie une représentation JSON de l'objet nouvellement créé en cas de succès, donnant ainsi à javascript un accès aux identifiants uniques nécessaires pour le nouvel objet, etc. Ce message est bien sûr envoyé. avec un code de statut 200.

Si un utilisateur soumet des données mal formées ou non valides (par exemple un champ "nom" invalide/incomplet), je souhaite renvoyer les messages d'erreur de validation via JSON. (Je ne vois pas pourquoi ce serait une mauvaise chose).

Ma question est la suivante: ce faisant, dois-je envoyer un code de statut 200 , car j'ai réussi à gérer leurs données non valides? Par conséquent, j'utiliserais le callback jQuery success, mais je vérifierais simplement les erreurs ...

Ou , dois-je utiliser un code de statut 4xx , éventuellement "Bad Request", car les données qu'ils m'ont envoyées sont invalides? (et utilisez donc le callback error pour faire les notifications nécessaires côté client).

28
anonymous coward

Je suis d'accord avec la réponse 400 Bad Request. 

Pour vous inspirer, vous pouvez jeter un coup d'œil à la manière dont Twitter (service JSON largement utilisé) fait ceci: https://dev.Twitter.com/overview/api/response-codes

CodeText Description

  • 200OK - Succès! 
  • 304Not Modified - Aucune nouvelle donnée à renvoyer. 
  • 400Bad Request - La demande n'était pas valide ou ne pouvait être autrement traitée. Un message d'erreur d'accompagnement expliquera plus loin. Les demandes sans authentification sont considérées comme non valides et donneront cette réponse. 
  • 401Unauthorized - Informations d'authentification manquantes ou incorrectes. Également renvoyé dans d'autres circonstances (par exemple, tous les appels aux noeuds finaux API v1 renvoient 401). 
  • 403Forbidden - La demande est comprise, mais elle a été refusée ou l'accès n'est pas autorisé. Un message d'erreur d'accompagnement expliquera pourquoi. Ce code est utilisé lorsque des demandes sont refusées en raison de limites de mise à jour. Les autres raisons pour lesquelles cet état est renvoyé sont énumérées à côté des codes de réponse dans le tableau ci-dessous. 
  • 404Not Found - L'URI demandé n'est pas valide ou la ressource demandée, telle qu'un utilisateur, n'existe pas. Également renvoyé lorsque le format demandé n'est pas pris en charge par la méthode demandée. 
  • 406Not Acceptable - Renvoyé lorsqu'un format non valide est spécifié dans la demande. 
  • 410Gone - Cette ressource a disparu. Utilisé pour indiquer qu'un noeud final d'API a été désactivé. 
  • 420Enhance Your Calm Renvoyé lorsqu'une application est en cours de tarification limitée. 
  • 422Unprocessable Entity - Renvoyé lorsqu'une image téléchargée sur POST compte/update_profile_banner ne peut pas être traitée. 
  • 429Too Many Requests - Renvoyé lorsqu'une demande ne peut pas être traitée car la limite de débit de l'application est épuisée pour la ressource. Voir Limitation de taux. 
  • 500Internal Server Error = Quelque chose est cassé. Envoyez des messages sur les forums de développeurs avec des détails supplémentaires sur votre demande, au cas où d’autres auraient des problèmes similaires. 
  • 502Bad Gateway - Twitter est en panne ou en cours de mise à niveau. 
  • 503Service Unavailable - Les serveurs Twitter sont actifs, mais surchargés de demandes. Réessayez plus tard. 
  • 504Gateway Timeout - Les serveurs Twitter sont en service, mais la demande n'a pas pu être traitée en raison d'une défaillance de notre pile. Réessayez plus tard.
14
MPV

J'enverrais un en-tête '400 requêtes incorrectes' en réponse avec des informations en json sur ce qui n'allait pas. Puis saisissez l'événement avec le gestionnaire d'événements jquerys $ .ajaxError () et analysez le message d'erreur que j'ai reçu en retour. fournir de bons commentaires à l'utilisateur final.

Vous pouvez en savoir plus sur le gestionnaire d’événements ajaxError ici

1
Wirde