如何定义"方法"在jsonrpc?

时间:2014-10-14 07:35:45

标签: python json-rpc

我按照the link尝试jsonrpc2。 我有一个名为hello.py的文件

def greeting(name):
return dict(message="Hello, %s!" % name)

然后我跑

runjsonrpc2 hello

我的代码是

import jsonrpc2
import requests
import json
url = "http://localhost:8080/"
headers = {'content-type': 'application/json'}
payload = {
    "method": "greeting",
    "params":{"name":"yy"},
    "jsonrpc": "2.0",
    "id":1.0,
}

response = requests.post(url, data=json.dumps(payload), headers=headers).json()

服务器有响应,但我得到了

u'error': {u'code': -32601, u'message': u'Method Not Found'}

我应该如何定义"方法"?

1 个答案:

答案 0 :(得分:0)

首先简短回答:

您需要将模块名称添加到方法名称:

payload = {
    "method": "hello.greeting",
    "params":{"name":"yy"},
    "jsonrpc": "2.0",
    "id":1.0,
}

答案很长:

查看runjsonrpc2,它作为参数传递的模块的作用是将其所有方法映射到相应的callable。这是在add_module方法中完成的:

def add_module(self, mod):
    name = mod.__name__
    for k, v in ((k, v) for k, v in mod.__dict__.items() if not k.startswith('_') and callable(v)):
        self.methods[name + '.' + k] = v  # <-- here it is the key point

它用什么作为方法名称?它使用模块名称dot作为方法名称。因此,您收到u'error': {u'code': -32601, u'message': u'Method Not Found'}错误,因为实际上不存在greeting方法,而是hello.greeting