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 |