JSON-RPC 2.0
April 11, 2025 · View on GitHub
JSON-RPC是一个无状态且轻量级的远程过程调用(RPC)协议。 本规范主要定义了一些数据结构及其相关的处理规则。它允许运行在基于socket,http等诸多不同消息传输环境的同一进程中。
请求对象
客户端发送一个调用请求到服务端,请求对象是一个JSON对象,包含以下成员:
jsonrpc:字符串,必须是"2.0"。method:字符串,必须是一个有效的方法名。params:调用方法所需要的基本类型或结构化类型的参数值,该成员参数可以被省略。id:已建立客户端的唯一标识id,值必须包含一个字符串、数值或NULL空值。如果该成员被省略,则该请求被视为一个通知请求。
示例:
{
"jsonrpc": "2.0",
"method": "users/create",
"params": {
"name": "poneding",
"age": 18
},
"id": 1
}
响应对象
对于 RPC 的调用请求,除通知外,服务端都必须回复响应。响应对象是一个 JSON 对象,包含以下成员:
jsonrpc:字符串,必须是"2.0"。result:调用成功时返回的结果值,值可以是基本类型或结构化类型。调用成功时必须返回该成员,失败时必须省略该成员。error:调用失败时返回的错误对象,包含以下成员(调用失败时必须返回该成员,成功时必须省略该成员):code:数值,错误码。message:字符串,错误信息。data:可选,包含额外的错误信息。
id:已建立客户端的唯一标识id,值必须包含一个字符串、数值或NULL空值,必须与请求中的id一致。
提炼:
响应对象中
result和error只能存在且必须存在一个,不能同时存在。
error.code 枚举:
-32700:Parse error,解析错误,JSON 解析错误。-32600:Invalid Request,无效请求,请求对象规范不符合。-32601:Method not found,方法不存在,请求的方法不存在。-32602:Invalid params,无效参数,params校验错误。-32603:Internal error,内部错误,服务端发生错误。-32000 ~ -32099:Server error,服务端错误,预留自定义的服务端错误。
批量请求与响应
请求对象是一个数组,包含多个请求对象。响应对象是一个数组,包含多个响应对象,id对应的请求对象的响应。
请求示例:
[
{
"jsonrpc": "2.0",
"method": "users/create",
"params": {
"name": "poneding",
"age": 18
},
"id": 1
},
{
"jsonrpc": "2.0",
"method": "users/get",
"params": {
"id": 1
},
"id": 2
}
]
响应示例:
[
{
"jsonrpc": "2.0",
"result": {
"id": 1,
"name": "poneding",
"age": 18
},
"id": 1
},
{
"jsonrpc": "2.0",
"error": {
"code": -32601,
"message": "Method not found"
},
"id": 2
}
]