Python Twisted JSON RPC
Может кто-нибудь порекомендовать какой-нибудь простой код для настройки простого клиента и сервера JSON RPC с использованием скрученного?
Я нашел txJSON-RPC, но мне было интересно, есть ли у кого-то опыт использования некоторых из этих anc, и может что-то порекомендовать.
Ответы
Ответ 1
txJSONRPC отлично. Я использую его, и он работает. Я предлагаю вам попробовать.
SERVER:
from txjsonrpc.web import jsonrpc
from twisted.web import server
from twisted.internet import reactor
class Math(jsonrpc.JSONRPC):
"""
An example object to be published.
"""
def jsonrpc_add(self, a, b):
"""
Return sum of arguments.
"""
return a + b
reactor.listenTCP(7080, server.Site(Math()))
reactor.run()
КЛИЕНТ:
from twisted.internet import reactor
from txjsonrpc.web.jsonrpc import Proxy
def printValue(value):
print "Result: %s" % str(value)
def printError(error):
print 'error', error
def shutDown(data):
print "Shutting down reactor..."
reactor.stop()
proxy = Proxy('http://127.0.0.1:7080/')
d = proxy.callRemote('add', 3, 5)
d.addCallback(printValue).addErrback(printError).addBoth(shutDown)
reactor.run()
В качестве бонуса я оставлю несколько альтернатив: amp.
http://amp-protocol.net
Ответ 2
Если вы ищете независимый от структуры подход, this lib Я нажал (используя mixin), может быть полезно:
Ответ 3
Cyclone, Tornado async реализация веб-сервера, написанная с использованием twisted, имеет встроенный обработчик запросов json-rpc, который использует модуль python json/simplejson. Пример сервера и кода клиента здесь.
Ответ 4
wikipedia имеет кучу реализаций, перечисленных для python: https://en.wikipedia.org/wiki/JSON-RPC#Implementations
Тем не менее, txjason чувствует себя как один из лучших, встроенных в скрученный. Кажется, что он, например, поддерживает ответы на неполадку из коробки. Большая часть из них была бы переносимой на python3 с использованием шести. Самой ужасной частью является проверка параметров, которая в любом случае не отображается в обычном общедоступном API.
Ответ 5
Для меня это лучше работало, чем "библиотеки", говоря о клиенте.
TESTDATA = {'id': 1234,
'method': 'getbalance',
}
URL = 'http://localhost:7777'
d= getPage(URL,method="POST",postdata=json.dumps(TESTDATA))
d.addBoth(lambda x :print(json.loads(x)))