openwrt Json-rpc

参见https://www.jsonrpc.org/specification
JSON-RPC(javsscript object nonation-Remote Procedure Call Protocol)是基于json的跨语言远程调用协议,是一种轻量级且无状态的远程过程调用(RPC)协议,RPC是把本地函数映射到 API,即每一个公开给客户端的API对应一个服务函数。

一、JSON-RPC特性:
1.JSON-RPC是轻量级的数据格式,小数据通信。
2.JSON-RPC可以在不同的平台和语言之间进行通信。
3.JSON-RPC可以通过添加自定义的方法和参数来扩展协议。
4.客户端和服务器端交换数据时区分大小写。
5.客户端被定义成原始请求对象和响应对象处理器。
6.服务器被定义成原始响应对象和请求对象处理器。

二、数据交互语法格式:
--> data sent to Server
<-- data sent to Client

三、对象请求方式:
request object是一个rpc call发送请求到服务器,请求格式包含如下的成员:
jsonrpc:JSON-RPC协议版本
method:远程调用方法
params: 传递给远程方法的参数列表,若需要参数,则参数为数组或者对象
id:请求对象的唯一标识
四、响应请求方式:
当进行对象请求后,服务器回复响应格式如下:
jsonrpc:JSON-RPC协议版本
result:当调用成功时,返回method方法的结果;若调用失败,则该成员不存下。
error:若出错时该成员返回错误值,若调用成功该成员不存在
id:与请求对象相同的对象标识
五、error对象的说明:
error对象包含如下的成员
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.

examples:
1.以数组作为参数方式
--> {"jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": 1}
<-- {"jsonrpc": "2.0", "result": 19, "id": 1}

--> {"jsonrpc": "2.0", "method": "subtract", "params": [23, 42], "id": 2}
<-- {"jsonrpc": "2.0", "result": -19, "id": 2}
2.以对象做为参数方式
--> {"jsonrpc": "2.0", "method": "subtract", "params": {"subtrahend": 23, "minuend": 42}, "id": 3}
<-- {"jsonrpc": "2.0", "result": 19, "id": 3}

--> {"jsonrpc": "2.0", "method": "subtract", "params": {"minuend": 42, "subtrahend": 23}, "id": 4}
<-- {"jsonrpc": "2.0", "result": 19, "id": 4}
3.不存在method方式
--> {"jsonrpc": "2.0", "method": "foobar", "id": "1"}
<-- {"jsonrpc": "2.0", "error": {"code": -32601, "message": "Method not found"}, "id": "1"}
4.error消息方式
--> {"jsonrpc": "2.0", "method": "foobar, "params": "bar", "baz]
<-- {"jsonrpc": "2.0", "error": {"code": -32700, "message": "Parse error"}, "id": null}

--> {"jsonrpc": "2.0", "method": 1, "params": "bar"}
<-- {"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request"}, "id": null}


六、通知方式:
notification是一个没有id成员的Request对象。通知是不需要回复请求对象。

examples:
--> {"jsonrpc": "2.0", "method": "update", "params": [1,2,3,4,5]}
--> {"jsonrpc": "2.0", "method": "foobar"}

七、批处理对象方式:
在同一时间发送几个请求对象为批处理对象。在处理完所有批处理请求对象后,服务器应使用包含相应响应对象的数组进行处理。对通知的响应对象外,每个请求对象都应该存在一个响应对象。服务器可以将批处理rpc调用作为一组并发任务进行处理,从批处理调用返回的响应对象可以在数组中以任何顺序返回。客户端应该根据每个对象中的id成员来匹配请求对象和响应对象。如果批处理rpc调用未能被识别为有效的JSON或至少具有一个值的数组,则来自服务器的响应必须是单个响应对象。

examples:
--> [
  {"jsonrpc": "2.0", "method": "sum", "params": [1,2,4], "id": "1"},
  {"jsonrpc": "2.0", "method"
]
<-- {"jsonrpc": "2.0", "error": {"code": -32700, "message": "Parse error"}, "id": null}

--> [
        {"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"}
    ]
批处理通知方式:
--> [
        {"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

八、JSON-RPC JavaScript 数据解析

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值