知识学习之Json-RPC
JSON-RPC技术
JSON-RPC是一个无状态且轻量级的远程过程调用(RPC)协议。 本规范主要定义了一些数据结构及其相关的处理规则。它允许运行在基于socket,http等诸多不同消息传输环境的同一进程中。
协议描述
data sent to Server
<code>{ "method": "sayHello", "params": ["Hello JSON-RPC"], "id": 1}</code>
参数介绍:
method: 调用的方法名
params: 方法传入的参数,若无参数则传入 []
id : 调用标识符,用于标示一次远程调用过程;已建立客户端的唯一标识id,值必须包含一个字符串、数值或NULL空值。如果不包含该成员则被认定为是一个通知。
Note
服务端必须回答相同的值如果包含在响应对象。 这个成员用来两个对象之间的关联上下文。
[1] 在请求对象中不建议使用NULL作为id值,因为该规范将使用空值认定为未知id的请求。另外,由于JSON-RPC 1.0 的通知使用了空值,这可能引起处理上的混淆。
[2] 使用小数是不确定性的,因为许多十进制小数不能精准的表达为二进制小数。
data sent to Client
<code>
{ "result":"Hello JSON-RPC","error",null,"id":1}
</code>
参数介绍:
result: 方法返回值,若无返回值,则返回null。若调用错误,返回null。
error :调用时错误,无错误返回null。
该成员在失败是必须包含。
当没有引起错误的时必须不包含该成员。
id: 调用标识符,与调用方传入的标识符一致。
该成员值必须于请求对象中的id成员值一致。
若在检查请求对象id时错误(例如参数错误或无效请求),则该值必须为空值。
通知模式
没有包含“id”成员的请求对象为通知
example
所有都为通知的rpc批量调用:
--> [
{"jsonrpc": "2.0", "method": "notify_sum", "params": [1,2,4]},
{"jsonrpc": "2.0", "method": "notify_hello", "params": [7]}
]
<-- //Nothing is returned for all notification batches
rpc调用如果存在参数则必须为基本类型或结构化类型的参数值,要么为索引数组,要么为关联数组对象。
索引:参数必须为数组,并包含与服务端预期顺序一致的参数值。
关联名称:参数必须为对象,并包含与服务端相匹配的参数成员名称。没有在预期中的成员名称可能会引起错误。名称必须完全匹配,包括方法的预期参数名以及大小写。
error object
{"code":"", message:"","data":""}
code:使用数值表示该异常的错误类型。 必须为整数。
message:对该错误的简单描述字符串。 该描述应尽量限定在简短的一句话。
data:包含关于错误附加信息的基本类型或结构化类型。该成员可忽略。 该成员值由服务端定义(例如详细的错误信息,嵌套的错误等)。
总结
json-rpc是一种非常轻量级的跨语言远程调用协议,实现及使用简单。仅需几十行代码,即可实现一个远程调用的客户端,方便语言扩展客户端的实现。
至于 ****WEB开发中,使用JSON-RPC好,还是RESTful API好?****
可以移步这里http://www.zhihu.com/question/28570307