JSON-RPC 2.0是一种基于JSON(JavaScript Object Notation)的远程过程调用(RPC)协议。它是一种轻量级的、无状态的、跨语言的通信协议,常用于客户端与服务端之间的交互。
在JSON-RPC 2.0中,有以下三种主要的消息类型:
用于客户端调用服务端的方法,结构如下:
json{
"jsonrpc": "2.0",
"method": "methodName",
"params": ["param1", "param2"],
"id": 1
}
jsonrpc:协议版本,固定为2.0。method:调用的远程方法名。params:方法参数,可以是数组或对象。id:唯一标识请求的ID,用于匹配响应。可为数字、字符串或null。示例:
json{
"jsonrpc": "2.0",
"method": "add",
"params": [4, 5],
"id": 123
}
用于服务端返回结果或错误信息,结构如下:
成功响应:
json{
"jsonrpc": "2.0",
"result": 9,
"id": 123
}
jsonrpc:协议版本。result:调用方法的返回结果。id:与请求对象中的id一致,用于匹配响应。错误响应:
json{
"jsonrpc": "2.0",
"error": {
"code": -32600,
"message": "Invalid Request",
"data": "Additional information if available"
},
"id": null
}
error:包含错误信息的对象。
code:标准错误码。message:错误描述信息。data:可选的额外错误信息。id:如果无法解析请求或无法响应,则id设为null。通知是一种特殊的请求,不需要响应。用于不关心结果的场景,例如日志记录等。
通知对象示例:
json{
"jsonrpc": "2.0",
"method": "logMessage",
"params": ["User logged in"]
}
id字段。JSON-RPC 2.0定义了一组标准错误码:
| 错误码 | 错误类型 | 描述 |
|---|---|---|
| -32700 | Parse Error | 无法解析 JSON 数据 |
| -32600 | Invalid Request | 请求对象无效 |
| -32601 | Method Not Found | 方法不存在或不可用 |
| -32602 | Invalid Params | 参数无效 |
| -32603 | Internal Error | 服务端内部错误 |
| -32000~-32099 | Server Error | 自定义服务器错误 |
JSON-RPC 2.0支持在一个请求中发送多个调用,服务端也会以数组形式返回响应。
批量请求示例:
json[
{
"jsonrpc": "2.0",
"method": "add",
"params": [1, 2],
"id": 1
},
{
"jsonrpc": "2.0",
"method": "subtract",
"params": [5, 3],
"id": 2
}
]
批量响应示例:
json[
{
"jsonrpc": "2.0",
"result": 3,
"id": 1
},
{
"jsonrpc": "2.0",
"result": 2,
"id": 2
}
]
如果某个请求是通知或者出错,也会在响应中反映:
json[
{
"jsonrpc": "2.0",
"result": 3,
"id": 1
},
{
"jsonrpc": "2.0",
"error": {
"code": -32601,
"message": "Method not found"
},
"id": 2
}
]
场景1:简单调用 客户端请求服务端进行加法运算:
json{
"jsonrpc": "2.0",
"method": "add",
"params": [10, 20],
"id": 100
}
服务端返回结果:
json{
"jsonrpc": "2.0",
"result": 30,
"id": 100
}
场景2:错误处理 客户端请求一个不存在的方法:
json{
"jsonrpc": "2.0",
"method": "unknownMethod",
"params": [],
"id": 101
}
服务端返回错误:
json{
"jsonrpc": "2.0",
"error": {
"code": -32601,
"message": "Method not found"
},
"id": 101
}
场景3:通知 客户端发送通知,不需要返回结果:
json{
"jsonrpc": "2.0",
"method": "notifyEvent",
"params": ["EventData"]
}
服务端不会返回任何响应。
JSON-RPC 2.0提供了一种简洁、灵活且强大的通信方式,特别适用于:
通过JSON-RPC 2.0,可以高效地管理远程方法调用、错误处理和批量操作,提升系统的整体性能和可靠性。


本文作者:蒋固金
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!