君の瞳はまるでルビー - Ruby 関連まとめサイト

xmlrpc モジュールについて - Sinatra 上に XML-RPC エントリポイントを構築

最終更新: 2015-03-31 (火) 21:53:22 (2274d)

xmlrpc モジュールについて

XMLRPC::Server クラスを使って Sinatra 上に XML-RPC エントリポイントを構築する方法について説明します。

前提

以下を前提としています。

Ruby 1.8*1 や CGI として Sinatra*2 を動かそうとする場合は、もう少し工夫が必要になります。

サンプル(server.rb)

以下にサンプルを示します。

# coding: UTF-8
# server.rb

require 'sinatra'
require 'xmlrpc/server'

configure do
  class Calculator

    INTERFACE = XMLRPC::interface("calculator") {
      meth 'int add(int, int)', 'Add two numbers'
      meth 'int div(int, int)', 'Divide two numbers'
    }

    def add(a, b) a + b end
    def div(a, b) a / b end

  end

  XMLRPC_SERVER = XMLRPC::CGIServer.new
  XMLRPC_SERVER.add_handler(Calculator::INTERFACE, Calculator.new)
end

post '/' do
  return [200, {'Content-Type' => 'text/xml'}, XMLRPC_SERVER.process(request.body.read)]
end

解説

configure は環境起動時に Sinatra から1度だけ呼び出されるブロックです。ここで XMLRPC::CGIServer インスタンスを準備します。

post で XML-RPC の要求を受け取ったら XMLRPC::CGIServer の process メソッドに request.body.read を渡して XML-RPC の処理を実行します。応答は text/xml である必要があるため、戻り値で Content-Type ヘッダーを指定します。200 は正常応答を表す HTTP ステータスの数値です。

動作確認をするには以下のコマンドを実行して、Sinatra アプリケーションをローカルで動作させます。

ruby server.rb -p 8080

クライアントは「xmlrpc モジュールについて」にある client.rb と同じもので動作します。

コメント

本ページの内容に関して何かコメントがある方は、以下に記入してください。

コメントはありません。 コメント/xmlrpc/server/on_sinatra

お名前: