JSON-RPCを試す
"Operating System Concepts"でRPCのセッションを読んでたのだけど、イマイチ実感つかめないのでいい機会だからJSON-RPCを触ってみようと思った次第。なお、JSON-PRCの仕様はこちら。
http://json-rpc.org/wiki/specification
Zigorouさんのエントリー見つけたので、JSON::Shellで試してみる。
JSON::Shell
インストールはcpanmで。
sudo cpanm -Sv Term::ReadLine::Gnu sudo cpanm -Sv JSON::Shell
あとはshellから叩けば。
kotaro@mac:~> jsonshell Exiting subroutine via next at /opt/local/lib/perl5/site_perl/5.8.9/Shell/Base.pm line 200. JSON::Shell 1.0 $ endpoint http://www.raboof.com/Projects/Jayrock/Demo.ashx Endpoint set. www.raboof.com/Projects/Jayrock/Demo.ashx$ post now "" 'jsonToObj' will be obsoleted. Please use 'decode' instead. at /opt/local/lib/perl5/site_perl/5.8.9/JSON/Shell.pm line 143 REQUEST: $VAR1 = { 'params' => [], 'id' => 298438, 'method' => 'now' }; 'jsonToObj' will be obsoleted. Please use 'decode' instead. at /opt/local/lib/perl5/site_perl/5.8.9/JSON/Shell.pm line 160 RESPONSE: $VAR1 = { 'id' => 298438, 'result' => '2011-06-25T20:08:14.0993456-07:00' };
なーんかobsoletedとか出る。
RPC::JSON
RPC::JSON - JSON-RPC Client Library だそうで。
{ "serviceType": "JSON-RPC", "serviceURL": "http://www.raboof.com/Projects/Jayrock/Demo.ashx", "objectName": [], "SMDVersion":1, "methods":[ { "name": "now", "parameters":[] }, { "name": "sum", "parameters": [ {"name": "x"}, {"name": "y"} ] } ] }
jmdファイルをnewの時に指定する必要があるらしく、こんな感じで定義してみた。
実際に使ってみる。
perl -MData::Dump=dump -MRPC::JSON -le 'print dump $jsonrpc=RPC::JSON->new("file:///Users/ito.kotaro/json.smd")->methods;' { now => [], sum => [{ name => "x" }, { name => "y" }] }
perl -MData::Dump=dump -MRPC::JSON -le 'print dump $jsonrpc=RPC::JSON->new("file:///Users/ito.kotaro/json.smd")->now' garbage after JSON object, at character offset 4 (before "-06-25T20:46:18.2218...") at /opt/local/lib/perl5/site_perl/5.8.9/JSON.pm line 168.
実際に取得してきている様子。エラー出るけど。
まとめ
なんだか中途半端感たっぷりだけど、JSON使ってRPCできるんだなーということだけ確認できたからOKとしよう。