JSON RPC 2.0的WSGI框架
项目描述
jsonrpc2是JSON RPC 2.0的WSGI框架。
JSON RPC 2.0规范可以在http://www.jsonrpc.org/specification 上查看。
快速入门
通过pip安装
$ pip install jsonrpc2
在hello.py中编写你的过程
def greeting(name): return dict(message="Hello, %s!" % name)
运行jsonrpc2服务器
$ runjsonrpc2 hello
与Paste Script集成
使用paste script模板创建项目
$ paster create -t paster_jsonrpc2 myrpc $ cd myrpc
运行服务器
$ paster serve run.ini
内部
>>> import json >>> from jsonrpc2 import JsonRpcApplication
示例过程
>>> def greeting(name="world"): ... return "Hello, %s!" % name
创建rpc应用程序
>>> app = JsonRpcApplication(rpcs=dict(greeting=greeting))
设置测试
>>> from webtest import TestApp >>> testapp = TestApp(app)
调用过程
>>> call_values = {'jsonrpc':'2.0', 'method':'greeting', 'id':'greeting'} >>> res = testapp.post('/', params=json.dumps(call_values), content_type="application/json")
获取结果
>>> res.json {u'jsonrpc': u'2.0', u'id': u'greeting', u'result': u'Hello, world!'}
延迟加载
>>> app.rpc.methods['sample.add'] = 'tests.sample:add' >>> call_values = {'jsonrpc':'2.0', 'method':'sample.add', 'id':'sample.add', 'params':[1, 2]} >>> res = testapp.post('/', params=json.dumps(call_values), content_type="application/json") >>> res.json {u'jsonrpc': u'2.0', u'id': u'sample.add', u'result': 3}
extra vars
>>> from jsonrpc2 import JsonRpc >>> rpc = JsonRpc() >>> rpc['add'] = lambda a, b: a + b >>> rpc({'jsonrpc': '2.0', 'method': 'add', 'id': 'rpc-1', 'params': {'a': 2}}, b=3) {'jsonrpc': '2.0', 'id': 'rpc-1', 'result': 5}
处理错误
>>> from jsonrpc2 import JsonRpc >>> class MyException(Exception): ... pass >>> def my_rpc(): ... raise MyException() >>> rpc = JsonRpc({'call': my_rpc}, {MyException: -32001}) >>> rpc({'jsonrpc': '2.0', 'method': 'call', 'id': 'rpc-1', 'params': []}) {'jsonrpc': '2.0', 'id': 'rpc-1', 'error': {'message': '', 'code': -32001, 'data': '[]'}}
JSON-RPC2 示例
使用原始rpc处理器
>>> from jsonrpc2 import JsonRpc >>> rpc = JsonRpc()
示例过程
>>> def subtract(minuend, subtrahend): ... return minuend - subtrahend >>> def update(*args): ... pass >>> def foobar(): ... pass
使用字典接口注册过程
>>> rpc['subtract'] = subtract >>> rpc['update'] = update >>> rpc['foobar'] = foobar
按位置参数调用过程
>>> rpc({"jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": 1}) {'jsonrpc': '2.0', 'id': 1, 'result': 19} >>> rpc({"jsonrpc": "2.0", "method": "subtract", "params": [23, 42], "id": 2}) {'jsonrpc': '2.0', 'id': 2, 'result': -19}
按名称参数调用过程
>>> rpc({"jsonrpc": "2.0", "method": "subtract", "params": {"subtrahend": 23, "minuend": 42}, "id": 3}) {'jsonrpc': '2.0', 'id': 3, 'result': 19} >>> rpc({"jsonrpc": "2.0", "method": "subtract", "params": {"minuend": 42, "subtrahend": 23}, "id": 4}) {'jsonrpc': '2.0', 'id': 4, 'result': 19}
通知
>>> rpc({"jsonrpc": "2.0", "method": "update", "params": [1,2,3,4,5]}) >>> rpc({"jsonrpc": "2.0", "method": "foobar"})
调用不存在的过程
>>> del rpc['foobar'] >>> rpc({"jsonrpc": "2.0", "method": "foobar", "id": "1"}) {'jsonrpc': '2.0', 'id': '1', 'error': {'message': 'Method Not Found', 'code': -32601}}
调用无效的JSON-RPC
>>> rpc([1,2,3]) {'jsonrpc': '2.0', 'id': None, 'error': {'message': 'Invalid Request', 'code': -32600}} >>> rpc({"jsonrpc": "2.0", "method": 1, "params": "bar"}) {'jsonrpc': '2.0', 'id': None, 'error': {'message': 'Invalid Request', 'code': -32600}}
批量调用
>>> rpc['sum'] = lambda *args: reduce(lambda a, b: a + b, args) >>> def get_data(): ... return ["hello", 5] >>> rpc['get_data'] = get_data >>> result = rpc ([ {"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"} ]) >>> from pprint import pprint >>> pprint(result) [{'id': '1', 'jsonrpc': '2.0', 'result': 7}, {'error': {'code': -32601, 'message': 'Method Not Found'}, 'id': None, 'jsonrpc': '2.0'}, {'id': '2', 'jsonrpc': '2.0', 'result': 19}, {'error': {'code': -32600, 'message': 'Invalid Request'}, 'id': None, 'jsonrpc': '2.0'}, {'error': {'code': -32601, 'message': 'Method Not Found'}, 'id': '5', 'jsonrpc': '2.0'}, {'id': '9', 'jsonrpc': '2.0', 'result': ['hello', 5]}]
变更日志
0.4.1
0.4是棕色袋发布。
0.4
特性
添加了对py3的支持
添加了注册应用程序错误
修复了错误
0.3
修复错误
粘贴脚本模板
运行jsonrpc2命令
0.3.1
修复错误(带有charset的内容类型)
0.3.2
能够将额外变量传递给过程
0.2
移除对WebOb的依赖
将过程调用类从Web应用程序类中分离出来
0.2.1
从方法名进行延迟加载。
0.2.2
添加字典接口。
0.2.3
修复:使用CONTENT_LENGTH读取正文。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分发
jsonrpc2-0.4.1.tar.gz (15.2 kB 查看哈希)
构建分发
jsonrpc2-0.4.1-py2.py3-none-any.whl (20.2 kB 查看哈希)
关闭
jsonrpc2-0.4.1.tar.gz的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ca1be95bcda87578c2851a478e7092a150a41bcc99942addd1ffe0f033e5228e |
|
MD5 | 1fce3d89554325e0a3a80f69b7e806c8 |
|
BLAKE2b-256 | cb9562a7675260b3156fc79bf5692d8173d9cee134b421f347eae3e7c54ac60f |
关闭
jsonrpc2-0.4.1-py2.py3-none-any.whl的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | de66e608c14f6a2dd532c2233b85784d201e8754dc59fc998d81b1ce8973660b |
|
MD5 | 6f3d2f3f0eba852ab81071334e193ca3 |
|
BLAKE2b-256 | 7769e41800d6ce7bca4f2409842e93325e12604493d6d9b226c0dcf733a195aa |