= JSON-RPC for twisted.web2 = == Dependencies == * Twisted (+twisted.web2) * simplejson == Notes == The original tests for {{{twisted.web2.xmlrpc}}} were also included/adapted and pass successfully. == Import == {{{ >>> from txjsonrpc.web2 import jsonrpc }}} == Usage == === Server === This is a direct copy from {{{twisted.web2.xmlrpc}}} and you use it identically, substituting JSONRPC and jsonrpc everywhere you see XMLRPC and xmlrpc. The docs for t.w2.xmlrpc are not up yet, but here are some example usages: {{{ from twisted.web2 import server from twisted.web2.channel import http from twisted.application import service, internet from txjsonrpc.web2 import jsonrpc class Example(jsonrpc.JSONRPC): """An example object to be published.""" addSlash = True def jsonrpc_echo(self, request, x): """Return all passed args.""" return x def jsonrpc_add(self, request, a, b): """Return sum of arguments.""" return a + b site = server.Site(Example()) chan = http.HTTPFactory(site) application = service.Application("Example JSON-RPC Server") jsonrpcServer = internet.TCPServer(7080, chan) jsonrpcServer.setServiceParent(application) }}} Save this as server.tac and run with the following command: {{{ $ twistd -noy server.tac }}} === Client === As far as I know, twisted.web2 doesn't have a (functional? good? any?) client yet. For this reason, {{{t.w2.xmlrpc}}} and {{{a.t.w2.jsonrpc}}} unit tests both use {{{t.w}}} for the client. We will do the same here: {{{ from twisted.internet import reactor from txjsonrpc.web.jsonrpc import Proxy def printValue(value): print repr(value) reactor.stop() def printError(error): print 'error', error reactor.stop() proxy = Proxy('http://127.0.0.1:7080/') proxy.callRemote('add', 3, 5).addCallbacks(printValue, printError) reactor.run() }}} Save this file as {{{client.py}}} and run it from the command line. You should see an '8' printed to {{{stdout}}}.