json-rpc 2.0规范解读

JSON-RPC2.0规范由JSON-RPC工作组([email protected])维护,发布于2010-03-26(基于2009-05-24的版本), 最近的更新于2013-01-04。

整体来说,2.0版本的JSON-RPC规范改动的很小,大的改动大概有3点:

  1. 参数可以用数组或命名参数
  2. 批量请求的细节明确化了
  3. 错误处理的机制标准化了

与1.0版本的兼容性

  • 建议2.0规范的实现兼容1.0协议,但是不强制要求,如果不能兼容,建议给出友好提示。
  • 请求和响应报文加了个参数表示协议的版本号:jsonrpc,它必须是“2.0”。
  • method的修改:以rpc开头方法名表示rpc内部的方法和扩展,其他地方必须不能使用。
  • 请求参数可以使用数组[参数1,参数2,,,],也可以使用命名参数{key:value}
  • 请求参数为空时params可省略。
  • id一般不应该为null,是数值的话不应该是小数。
  • 请求里没有id时,被当做通知。(1.0时这里是id为null。)
  • 请求参数必须精确匹配,包括大小写。
  • 应答必须包含result或error,但是两个成员都必须不能同时包含。

批量请求

终于说清楚了这个批量请求怎么操作,就是一次请求里用数组包装多个请求对象。示例如下,打包5个请求:

--> [
        {"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"},
        {"foo": "boo"},
        {"jsonrpc": "2.0", "method": "foo.get", "params": {"name": "myself"}, "id": "5"},
        {"jsonrpc": "2.0", "method": "get_data", "id": "9"}
    ]
<-- [
        {"jsonrpc": "2.0", "result": 7, "id": "1"},
        {"jsonrpc": "2.0", "result": 19, "id": "2"},
        {"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request"}, "id": null},
        {"jsonrpc": "2.0", "error": {"code": -32601, "message": "Method not found"}, "id": "5"},
        {"jsonrpc": "2.0", "result": ["hello", 5], "id": "9"}
    ]

规范定义了所有的请求应该并发执行,并且返回不保证顺序,客户端自己使用id去匹配对应的请求和响应。而且对于请求的处理中只要有一个出错,则返回一个统一的错误信息(就是不区分哪一条失败,全部都算失败了)。 这个设计看起来是针对事务考虑的,但是在一般的使用场景里应该会比较麻烦。

错误对象

改进的error机制是,error变成了一个明确定义的对象。包括三个属性:

  • code:数值,见下一节错误代码。
  • message:字符串格式的错误信息。
  • data:可选的,服务器端定义的一个数值或是对象,来附加额外的信息。

比原来的粗放型错误机制好多了。

错误代码

从XML-RPC借来了服务器端的错误代码:

code message meaning
-32700 Parse error Invalid JSON was received by the server. An error occurred on the server while parsing the JSON text.
-32600 Invalid Request The JSON sent is not a valid Request object.
-32601 Method not found The method does not exist / is not available.
-32602 Invalid params Invalid method parameter(s).
-32603 Internal error Internal JSON-RPC error.
-32000 to -32099 Server error Reserved for implementation-defined server-errors.

参考资料

时间: 2024-10-24 01:31:12

json-rpc 2.0规范解读的相关文章

json-rpc 1.0规范解读

JSON可能是这个地球上最简单的文本数据格式了,可读.灵活.数据量小,编解码方便.速度快,对Unicode和特殊字符支持的好.对比下XML,就知道额外的各种标签节点需要浪费多少字节数.JSON字符默认都要使用Unicode形式,所有非ACSII字符都可以用\uXXXX表示,而不需要额外的转义.相比之下,XML里需要使用转义或是CDATA(类似HTML里的PRE标签).或是Base64才能表示特殊数据.当然缺点也很明显,比二进制数据结构的数据量大,编解码慢,没有完备的类型系统,表达能力有限. JS

JSON-RPC 2.0规范 翻译 中文版

JSON-RPC 2.0规范 起源日期: 2010-03-26(基于2009-05-24的版本) 修正: 2013-01-04 作者: JSON-RPC 工作组 <[email protected]> 1 概述 JSON-RPC是一个无状态的.轻量级的远程过程调用(RPC)协议.本规范主要围绕它的处理方式定义了几个数据结构和规则.这个概念可用于在同一进程中.套接字或HTTP之间.或其他很多消息传递的环境中传输数据.它使用JSON (RFC 4627)作为数据格式. JSON-RPC的设计很简单

测试JSON RPC远程调用(JSON客户端)

#include <string> #include <iostream> #include <curl/curl.h> /* 标题:JSon客户端 Author: Kagula LastUpdateDate:2014-05-17 描述:测试JSON RPC远程调用 测试环境:Windows 8.1.Visual Studio 2013 SP1 curl-7.36.0 CPPCMS 1.0.4(JSON服务端) Java Servlet (JSON服务端) */ sta

測试JSON RPC远程调用(JSONclient)

#include <string> #include <iostream> #include <curl/curl.h> /* 标题:JSonclient Author: Kagula LastUpdateDate:2014-05-17 描写叙述:測试JSON RPC远程调用 測试环境:Windows 8.1.Visual Studio 2013 SP1 curl-7.36.0 CPPCMS 1.0.4(JSON服务端) Java Servlet (JSON服务端) *

基于php的json rpc原理及应用

json rpc 是一种以json为消息格式的远程调用服务,它是一套允许运行在不同操作系统.不同环境的程序实现基于Internet过程调用的规范和一系列的实现.这种远程过程调用可以使用http作为传输协议,也可以使用其它传输协议,传输的内容是json消息体. 下面我们code一套基于php的rpc框架,此框架中包含rpc的服务端server,和应用端client: (一)PHP服务端RPCserver jsonRPCServer.php class jsonRPCServer { /** *处理

BPMN 2.0规范

.1. BPMN 2.0是什么呢? 业务流程模型注解(Business Process Modeling Notation - BPMN)是 业务流程模型的一种标准图形注解.这个标准 是由对象管理组(Object Management Group - OMG)维护的. 基本上,BPMN规范定义了任务看起来怎样的,哪些结构可以 与其他进行连接,等等.这就意味着 意思不会被误解. 标准的早期版本(1.2版以及之前)仅仅限制在模型上, 目标是在所有的利益相关者之间形成通用的理解, 在文档,讨论和实现业

JSON API 1.0 核心开发者自述 | 你所不知道的那些技术细节

2013年5月,Yehuda Katz 完成了JSON API(英文,中文) 技术规范的初稿.事情就发生在 RailsConf 之后,在那次会议上他和 Steve Klabnik 就 JSON 雏形的技术细节相聊甚欢.在沟通单一 Rails 服务器库-- ActiveModel::Serializers 和单一 JavaScript 客户端库-- Ember Data 的强烈呼声下,JSON API 应运而生(关于这段历史,我在2013年2月第一届 EmberCamp 上有一个演讲,感兴趣的可以

无法解决“Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”与“Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”之间的冲突。正在随意选择“Newtonsoft.Jso

今天的程序莫名报错:  无法解决“Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”与“Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”之间的冲突.正在随意选择“Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, P

SD3.0协议解读一

前言: 老衲我近期研究的是SD/MMC卡驱动,研究过的SD/MMC驱动的贫僧们都应该知道SD/MMC协议是必不可少的一部分,除非你不想研究透SD/MMC驱动,那你大可只研究driver/mmc/host目录下的文件即可.说到SD/MMC协议,网上一搜,SD3.0的协议只有英文版的资料,要想真正理解协议,英文水平差的贫僧就可吃力了,老衲英文水平实在是一般,但是网上对SD3.0协议的解读相关的中文资料实在是少的可怜.老衲怒想写写对SD3.0协议的理解,于是这一系列的SD3.0协议解读将会陆续问世..