2016-01-20 1 views
0

Je suis actuellement à la recherche de l'implémentation de certaines réponses JSON RPC 2.0 dans mon code. Cependant, je ne suis pas très clair sur ce que sont les pratiques standard de l'utiliser:Réponses standard JSON RPC 2.0

1) Lorsque l'utilisateur envoie une requête avec des paramètres non valides, si je retourne simplement un message d'erreur par défaut verbatim

{"jsonrpc": "2.0", "error": {"code": -32602, "message": " Invalid params"}, "id": "1"} 

Ou Le message peut-il être plus spécifique, par exemple:

{"jsonrpc": "2.0", "error": {"code": -32602, "message": " Invalid params: invalid username"}, "id": "1"} 

Ou ces messages personnalisés doivent-ils avoir leur propre code d'erreur?

2) Si l'utilisateur dit, demande des données de la base de données et la réponse est "données non présentes", comme nous n'avons rencontré aucune erreur mais ne retournons rien, devrait être retourné comme JSON RPC error , ou devrait-il y avoir plus de réponse indiquant que les données n'ont pas été trouvées? En d'autres termes, la convention de JSON RPC est-elle d'utiliser les erreurs comme des conditions normales de retour comme dans Google Go, ou est-ce plutôt une sorte de panique «quelque chose de vraiment gâché»?

Répondre

2
  1. Selon la spécification (http://www.jsonrpc.org/specification#error_object), vous devez utiliser la propriété en option data pour vos informations supplémentaires sur l'erreur, donc, dans votre cas, la réponse doit être:

{"jsonrpc": "2.0", "error": {"code": -32602, "message": " Invalid params", "data":"invalid username"}, "id": "1"}

Vous peut créer vos propres codes d'erreur personnels dans la plage -32000 à -32099, mais je le ferais uniquement si nécessaire, c'est-à-dire, à moins que votre application client ne devrait se comporter dans ce cas ("nom d'utilisateur invalide") différent de celui d'un y autre -32602 cas.

  1. C'est à vous de décider. C'est une question de conception avec une portée plus large que JSON-RCP. Vous pouvez trouver des opinions à cet article: when-to-throw-an-exception