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