2010-06-25 7 views
8

Nous sommes au milieu d'une discussion en cours sur la façon de gérer les exceptions REST.Comment gérer les exceptions REST?

Réponse Type de contenu: JSON

Deux solutions: nous avons

  1. Jetez toutes les exceptions non vérifiées comme une réponse JSON.
  2. Envoyer une demande Code de réponse invalide.

Arguments:

  • Lorsque son erreur, pourquoi revenir JSON? Envoyez simplement un code de réponse invalide.

Contre argument:

  • Code de réponse sont trop techniques pour gérer pour les développeurs normaux.

Qu'est-ce que vous dites?

+0

Je me demande pourquoi les codes de réponse sont trop techniques. Si vous devez/pouvez prendre une mesure corrective, vous devez dépendre du code de réponse (ou de tout autre code d'erreur dans le fichier json) et non des chaînes d'erreur lisibles par l'utilisateur –

+0

Nous traitons toutes sortes de clients. Donc, nous ne voulons pas supposer que les développeurs avec les clients sont assez compétents pour comprendre les codes de réponse. C'était les pensées de quelques personnes et les miennes aussi. S'ils regardent le json, ils peuvent comprendre l'erreur. –

+0

L'un des principaux avantages de REST est l'uniformité des interfaces. Donc, quand vous dites que nous avons une API REST, le client anticipe automatiquement la liste des ressources et les opérations GET PUT POST DELETE et, de même, il connaît les codes d'erreur qu'il peut imaginer. Les chaînes d'erreur seraient certainement utiles à votre client (développeurs) pour déboguer. Mais le code qu'ils écrivent contre votre API * devrait * prendre des mesures basées sur les codes et non sur les chaînes. –

Répondre

13

Pour une API JSON que j'ai récemment développé, je fais les deux. Je réponds toujours avec JSON valide (bien, en supposant que je réponds du tout). Si je détecte une requête invalide, j'utilise le statut 400. Si je détecte une erreur de serveur (que je ne crois pas causée par une requête invalide), j'utilise un statut 5xx. L'objet JSON contient une clé spéciale définie uniquement pour les erreurs, avec une valeur de chaîne. Je pense que c'est une bonne solution qui respecte les principes REST et peut être utilisée de plusieurs façons. La même solution est utilisée par d'autres API JSON, telles que Yahoo Search. Essayez http://search.yahooapis.com/ImageSearchService/V1/imageSearch?appid=YahooDemo&output=json.

+1

+1: Avec une utilisation RESTful de HTTP, vous devez absolument exploiter les codes de réponse HTTP.Des informations supplémentaires peuvent être renvoyées dans la représentation. –

+0

Je viens de voir cette réponse dans les articles "connexes" de SO. Et bien que ce soit une vieille réponse, il est évident que ça se présente toujours. Je crois qu'il y a un * lot * de plus à gérer les erreurs que de simplement utiliser les codes de statut HTTP (ce qui est un bon début!). Voir http://soabits.blogspot.dk/2013/05/error-handling-considerations-and-best.html pour une discussion approfondie. –

5

Utilisez les codes d'erreur comme pour HTTP. Donc 50 * pour toute exception cause par un problème interne. Et 40 * pour les mauvais arguments. Évitez d'utiliser vos propres codes définis autant que possible. L'idée est d'avoir une interface "uniforme".

En général. 204 pour réussir sans envoyer de contenu 200 pour réussir avec une représentation json de la ressource Et si son opération n'est pas réussie, renvoyer le code de réponse approprié. Vous pouvez choisir de renvoyer un json. Pour simplifier les choses, vous pouvez avoir un format commun (json) pour toutes les réponses d'erreur.

http://en.wikipedia.org/wiki/REST est un must à lire avant de geler sur vos spécifications api.

+0

"201 pour réussir sans envoyer de contenu." 201 est créé, il ne doit donc être utilisé que lorsqu'une "nouvelle ressource est créée" et non pour un succès général. Vous pourriez penser à 204, "Aucun contenu" –

+0

oups! droite. Merci pour la correction! –

Questions connexes