JSON RPC 2.0 标准响应

JSON RPC 2.0 standard responses

我目前正在考虑在我的代码中实现一些 JSON RPC 2.0 响应。但是,我不太清楚使用它的标准做法是什么:

1) 当用户发送一个带有无效参数的请求时,我是否应该return逐字默认错误信息

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

或者消息可以更具体一些,例如:

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

或者此类自定义消息是否应该有自己的错误代码?

2) 如果用户说,从数据库请求数据并且响应是 "data is not present",因为我们没有遇到任何错误,但仍然没有 return 任何东西,应该是 returned 作为 JSON RPC error,还是应该更多地表示未找到数据的响应?换句话说,JSON RPC 中的约定是像 Google Go 中那样使用错误作为正常 return 条件,还是更类似于 "something really messed up" 恐慌?

  1. 根据规范 (http://www.jsonrpc.org/specification#error_object),您必须使用可选的 属性 data 作为有关错误的附加信息,因此,在您的情况下,响应必须是:

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

您可以在 -32000-32099 范围内创建您自己的个人错误代码,但我只会在必要时才这样做,也就是说,除非您的客户端应用程序在这种情况下应该表现( "invalid username") 不同于任何其他 -32602 案例。

  1. 这取决于你。这是一个比 JSON-RCP 范围更广的设计问题。您可以在此 post 找到一些意见:when-to-throw-an-exception