WEBrick+OrbjsonでJSON-RPCでアクセスできるWebサービスを作る
JSON-RPCライブラリのOrbjsonではWEBrickのServletが提供されています。それを使うとJSON-RPCでアクセスできるWebサービスをさくっと作成できます。
ということで、簡単にですが手順をまとめてみます。
概要
- Orbjsonのインストール
- 提供するAPIを定義したサービスクラスを書く
- HTTPサーバーを起動するサーバープログラムを書く
- サーバーにアクセスするクライアントを書く
- サーバーの起動
- クライアントの実行
1.Orbjsonのインストール
まず、Orbjsonをインストールします。gemを使ってインストールできます。
$ gem install Orbjson
2.サービスクラスを書く
提供するAPIを定義したサービスクラスを用意します。普通のRubyクラスです。
# JSON-RPCでアクセスできるようにするサービス class Kitten def meow(count) # 引数で指定された回数鳴く。 "meow!" * count end end
3.HTTPサーバーを起動するサーバープログラムを書く
#!/usr/local/bin/ruby require "rubygems" require 'webrick' require "orbjson" # Orbjsonの初期化 Orbjson::System.init( # 'services/kitten'をrequireし、Kittenクラスをサービスとして登録する。 'services/kitten' => ['Kitten'] ) # HTTPサーバー # ドキュメントルートとして"./html"をマウントし、ここにjsファイルを配置する s = HTTPServer.new( :Port => 8080, :DocumentRoot => File.dirname( __FILE__ ) + "/html") # JSON-RPCサーブレットをマウント s.mount("/json-rpc", Orbjson::WEBrick_JSON_RPC ) trap(:INT){ s.shutdown } s.start
4.クライアントを書く
サーバーAPIにアクセスするクライアントです。「jsonrpc_async.js」というクライアントライブラリが用意されているのでそれを利用します。
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <!-- 非同期クライアントライブラリを読み込む --> <script type="text/javascript" src="./jsonrpc_async.js"></script> </head> <body onload="main();"> <div id="stdout"></div> <script type="text/javascript"> function main() { // クライアントの作成 var jsonrpc = new JSONRpcAsyncClient( "./json-rpc" ); var kitten = jsonrpc.kitten // メソッドの実行 // 非同期クライアントでは第一引数でコールバックハンドラを渡す。 // 以降の引数はそのままサーバーAPIに渡される kitten.meow( function(result) { document.getElementById("stdout").innerHTML = result; }, 3); } </script> </body> </html>
5.サーバーの起動
各ファイルを以下の場所に配置し、
-server.rb ←サーバープログラム +services -kitten.rb ←サービスクラス +html -index.html ←クライアントプログラム -jsonrpc_async.js ←Orbjsonのクライアントライブラリ
サーバーを起動します。
$ ./server.rb
6.クライアントの実行
サーバーの起動後に、ブラウザで「http://localhost:8080/」にアクセスすると、index.htmlがロードされ、サーバーとJSON-RPCで通信した結果が表示されます。