JSON-RPC 2.0 是一种轻量级的远程过程调用协议,它严格定义了请求和响应的数据结构。以下是其规范要求:
1 请求(Request)结构
一个合法的 JSON-RPC 2.0 请求必须包含以下字段:
1 2 3 4 5 6 |
{ "jsonrpc": "2.0", "method": "methodName", "params": [...], "id": value } |
字段说明
-
jsonrpc (必须)
-
类型: 字符串
-
值必须为
"2.0"
-
用于标识 JSON-RPC 协议的版本
-
-
method (必须)
-
类型: 字符串
-
表示要调用的方法名
-
-
params (可选)
-
类型: 数组或对象
-
包含要传递给方法的参数
-
可以省略(当没有参数时)
-
-
id (可选)
-
类型: 字符串、数字或null
-
用于匹配请求和响应
-
如果是通知(不需要响应)则可以省略或为null
-
2 响应(Response)结构
成功的响应结构:
1 2 3 4 5 |
{ "jsonrpc": "2.0", "result": ..., "id": value } |
错误响应结构:
1 2 3 4 5 6 7 8 9 |
{ "jsonrpc": "2.0", "error": { "code": ..., "message": ..., "data": ... }, "id": value } |
字段说明
-
jsonrpc (必须)
-
类型: 字符串
-
值必须为
"2.0"
-
-
result (成功时必须)
-
类型: 任意
-
包含方法调用的返回值
-
如果调用失败则必须不存在
-
-
error (失败时必须)
-
类型: 对象
-
包含错误信息
-
如果调用成功则必须不存在
-
子字段:
-
code
: 整数,表示错误类型 -
message
: 字符串,简短的错误描述 -
data
: 可选,包含关于错误的附加信息
-
-
-
id (必须)
-
类型: 与请求中的id相同
-
必须与对应请求中的id相同
-
如果请求中的id为null(通知),则响应中不能包含id
-
3 错误代码规范
JSON-RPC 2.0 定义了一些标准错误代码:
代码 | 含义 | 说明 |
---|---|---|
-32700 | 解析错误(Parse error) | 服务器接收到无效的JSON |
-32600 | 无效请求(Invalid Request) | JSON格式正确但不是有效的请求 |
-32601 | 方法不存在(Method not found) | 请求的方法不存在或不可用 |
-32602 | 无效参数(Invalid params) | 提供的参数无效或不正确 |
-32603 | 内部错误(Internal error) | JSON-RPC内部错误 |
-32000到-32099 | 服务器错误(Server error) | 保留用于实现定义的服务器错误 |
4 通知(Notification)
通知是一种特殊的请求,不需要响应:
-
请求中没有
id
字段,或id
为null
-
服务器不应响应通知
-
客户端不应期待任何响应
示例通知请求:
1 2 3 4 5 |
{ "jsonrpc": "2.0", "method": "update", "params": [1, 2, 3] } |
5 批量请求和响应
JSON-RPC 2.0 支持批量请求,即在一个JSON数组中包含多个请求对象:
6 示例
完整请求示例
1 2 3 4 5 6 |
{ "jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": 1 } |
成功响应示例
1 2 3 4 5 |
{ "jsonrpc": "2.0", "result": 19, "id": 1 } |
错误响应示例
1 2 3 4 5 6 7 8 |
{ "jsonrpc": "2.0", "error": { "code": -32601, "message": "Method not found" }, "id": "1" } |
这些规范确保了JSON-RPC 2.0的实现可以跨语言和平台互操作。