开始日期:2010-03-26(based on the 2009-05-24 version)
更新:2013-01-04
作者:JSON-RPC Working Group json-rpc@googlegroups.com
JSON-RPC 是一种轻量级的远程过程调用协议(RPC),使用 JSON 格式(RFC 4627)作为数据交换标准,支持跨多种传输环境(如 HTTP、Socket)。该协议设计为无状态、简单明了。
JSON-RPC 2.0 与 1.0 版本不完全兼容,2.0 引入了 jsonrpc 字段(值为 “2.0”)作为版本标识。大部分实现应尽量兼容 1.0。
一个jsonrpc调用通过向服务器发送Request对象来表示。
{
"jsonrpc": "2.0",
"method": "subtract",
"params": [42, 23],
"id": 1
}
{
"jsonrpc": "2.0",
"result": 19,
"id": 1
}
{
"jsonrpc": "2.0",
"error": {
"code": -32601,
"message": "Method not found",
"data": null
},
"id": 1
}
为了同时发送多个请求对象,客户端 可以(MAY) 发送一个包含请求对象的数组。
服务器应(SHOULD)在处理完所有批量请求对象后,返回一个包含相应响应对象的数组。对于每个请求对象,应该(SHOULD)有一个对应的响应对象,但对于通知(即没有 id 字段的请求对象),则不应该(SHOULD NOT)生成任何响应对象。服务器可以(MAY)将批量 RPC 调用视为一组并发任务来处理,可以以任何顺序并行执行。
从批量调用返回的响应对象数组中的顺序可以是任意的。客户端应(SHOULD)基于每个对象中的 id 字段,在请求对象集合和结果响应对象集合之间匹配上下文。
如果批量 RPC 调用本身无法被识别为有效的 JSON 或至少包含一个值的数组,服务器必须(MUST)返回一个单独的响应对象。如果响应数组中没有响应对象(例如通知场景),服务器不得(MUST NOT)返回一个空数组,而是完全不返回任何内容。
// 请求
{
"jsonrpc": "2.0",
"method": "subtract",
"params": [42, 23],
"id": 1
}
// 响应
{
"jsonrpc": "2.0",
"method": "subtract",
"params": [42, 23],
"id": 1
}
// 请求
{
"jsonrpc": "2.0",
"method": "subtract",
"params": {
"subtrahend": 23,
"minuend": 42
},
"id": 2
}
// 响应
{
"jsonrpc": "2.0",
"method": "subtract",
"params": 19,
"id": 2
}
// 请求
{
"jsonrpc": "2.0",
"method": "update",
"params": [1,2,3,4,5]
}
// 响应
{
"jsonrpc": "2.0",
"method": "foobar",
}
// 请求
[
{
"jsonrpc": "2.0",
"method": "sum",
"params": [1,2,4],
"id": "1"
},
{
"jsonrpc": "2.0",
"method": "notify_hello",
"params": [7]
},
{
"jsonrpc": "2.0",
"method": "subtract",
"params": [42,23],
"id": "2"
},
{
"jsonrpc": "2.0",
"method": "notify_sum",
"params": [1,2,3,4,5],
"id": null
}
]
// 响应
[
{
"jsonrpc": "2.0",
"result": 7,
"id": "1"
},
{
"jsonrpc": "2.0",
"result": 19,
"id": "2"
}
]