目录
JSON-RPC 2.0 简介
请求对象
响应对象
通知
批量请求
错误码
使用场景
文档和版本控制
社区和支持
小结
参考资料
JSON-RPC (JavaScript Object Notation - Remote Procedure Call) 是一种轻量级的远程过程调用协议,使用 JSON(JavaScript 对象表示法)作为数据格式。JSON-RPC 2.0 是该协议的最新版本,在 1.0 版本的基础上增加了一些特性,如错误代码标准化、批量请求支持和无响应的通知。
JSON-RPC 的设计原则是简单性和互操作性,旨在为不同编程语言之间提供一种方便的方法来执行远程过程调用。通过定义一组简单的规则,任何能够解析 JSON 的语言或平台都可以实现 JSON-RPC 客户端或服务器。
接下来看下 JSON-RPC 2.0 协议的规范。
一个 JSON-RPC 2.0 请求数据是一个单一的 JSON 对象,可以包含以下成员:
一个标准的 JSON-RPC 2.0 请求示例如下:
{
"jsonrpc": "2.0",
"method": "subtract",
"params": [42, 23],
"id": 1
}
一个 JSON-RPC 2.0 响应数据也是一个单一的 JSON 对象,可以包含以下成员:
错误对象包括以下成员:
一个成功的响应示例如下:
{
"jsonrpc": "2.0",
"result": 19,
"id": 1
}
而一个异常响应示例如下:
{
"jsonrpc": "2.0",
"error": {
"code": -32601,
"message": "Method not found"
},
"id": 1
}
通知是一种特殊类型的请求,没有 id 成员,因此不会得到响应。这样客户端可以向服务器发送事件或命令而无需等待回复。一个通知示例如下:
{
"jsonrpc": "2.0",
"method": "updateStatus",
"params": ["online"]
}
JSON-RPC 2.0 支持批量请求,即可以在单个请求中发送多个 JSON-RPC 调用。每个调用都是独立的 JSON-RPC 请求对象,被放在一个数组中。服务器处理这些请求后返回一个数组,其中每个元素对应于一个调用。需要注意的是,如果其中一个调用是通知,则不会有对应的响应项。
[
{
"jsonrpc": "2.0",
"method": "sum",
"params": [1, 3, 5, 7, 9],
"id": "1"
},
{
"jsonrpc": "2.0",
"method": "notify_hello",
"params": ["Alice"]
},
{
"jsonrpc": "2.0",
"method": "subtract",
"params": [42, 23],
"id": "2"
}
]
JSON-RPC 2.0 规范中定义了标准的错误码,但开发者也可以根据自己的业务逻辑添加自定义的错误码。这些自定义错误代码应该在-32000到-32099之间,以避免与标准错误码冲突。通过使用自定义错误码,可以为客户端提供更加具体的错误信息。
假如这样一个场景,应用程序需要处理用户认证失败的情况,可以定义一个特定的错误码,比如 -32001,并为这个错误码配一个说明,如 Authentication failed。示例如下:
{
"jsonrpc": "2.0",
"error": {
"code": -32001,
"message": "Authentication failed"
},
"id": "1"
}
此外,还可以在 error 的 data 参数中包含更多的错误细节,比如错误发生的具体位置或建议的解决方法。
JSON-RPC 2.0 定义的标准错误码如下(自定义错误吗不要使用如下几个):
JSON-RPC 2.0 的使用场景包括但不限于如下几个:
良好的文档对于任何 API 都至关重要,尤其是像 JSON-RPC 2.0 这样依赖于明确的请求和响应格式的协议。
JSON-RPC 2.0 是一个开放的标准,拥有活跃的社区和丰富的资源。参与社区讨论、阅读官方文档和技术博客、关注相关论坛和社交媒体,都可以帮助更快地解决问题,并获取最新的最佳实践。
此外,很多流行的编程语言和框架都有现成的 JSON-RPC 库,可以大大简化开发过程。选择一个成熟且维护良好的库,不仅可以节省时间,还能减少出错的可能性。
JSON-RPC 2.0作为一种轻量级的 RPC 协议,提供了如标准化的错误处理、批量请求支持和通知机制等功能,具有简单、易用、跨语言等优点,适用于多种分布式系统场景。