読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

WEBrick+OrbjsonでJSON-RPCでアクセスできるWebサービスを作る

JSON-RPCライブラリのOrbjsonではWEBrickServletが提供されています。それを使うとJSON-RPCでアクセスできるWebサービスをさくっと作成できます。

ということで、簡単にですが手順をまとめてみます。

概要

  1. Orbjsonのインストール
  2. 提供するAPIを定義したサービスクラスを書く
  3. HTTPサーバーを起動するサーバープログラムを書く
  4. サーバーにアクセスするクライアントを書く
  5. サーバーの起動
  6. クライアントの実行

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で通信した結果が表示されます。