我按照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'}
我应该如何定义"方法"?
答案 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
。