Hatena::ブログ(Diary)

湘南ぱいそん RSSフィード

2010-12-08

JSON-RPC with Google App Engine

どうも!こんばんわ!
最近、なにかとJSON-RPCを流行らせたいミチル・ドバドバ・エビオスです!

Google App Engineのフレームワークkay-frameworkに同梱されているjsonrpc2について。
以前は、サクッと動いていた気がしたのですが、いつの間にかアップデートしていたので、使い方のメモ。

views.pyにRPC関数を定義し、method名と関数オブジェクトを関連付ける辞書をJsonRpcApplicationに渡すだけです!
簡単過ぎですね!!!orz

myapp/views.py

from kay.ext.jsonrpc2 import JsonRpcApplication
from kay.handlers.wrapper import WsgiApplicationHandler
from kay.utils import render_to_response

def index(request):
  return render_to_response('myapp/index.html', {'message': 'Hello'})

def hello():
  return "Hello JSON-RPC 2.0!"

def subtract(x, y):
  return x - y

methods = {
  "hello": hello,
  "subtract": subtract,
}
rpc_application = JsonRpcApplication(methods)
rpc_handler = WsgiApplicationHandler(rpc_application)

myapp/urls.py

from kay.routing import (
  ViewGroup, Rule
)

view_groups = [
  ViewGroup(
    Rule('/', endpoint='index', view='myapp.views.index'),
    Rule('/rpc', endpoint='rpc', view='myapp.views.rpc_handler'),
  )
]

$ curl -d '{"jsonrpc": "2.0", "id": 1, "method": "hello", "params": []}' -H "Content-Type: application/json" http://127.0.0.1:8080/rpc
{"jsonrpc": "2.0", "id": 1, "result": "Hello JSON-RPC 2.0!"}
$ curl -d '{"jsonrpc": "2.0", "id": 2, "method": "subtract", "params": [42, 23]}' -H "Content-Type: application/json" http://127.0.0.1:8080/rpc
{"jsonrpc": "2.0", "id": 2, "result": 19}

JavaScriptからは、jQuery pluginもあるので、これを使うと便利です。
https://github.com/hagino3000/jquery-jsonrpc2.0


WebSocketとJSON-RPCを組み合わせたかったのですが、今日は至らず。。。次の機会に

https://github.com/MiCHiLU/jquery.jsonrpc


次のバトンは、すっかりDjangoのひとになってるらしい id:Isoparametric さん!お願いします

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/MiCHiLU/20101208/1291820290