Ruby Webサービス
石鹸とは何ですか?
Simple Object Access Protocol (SOAP、略称 Simple Object Access Protocol) は、データを交換するためのプロトコル仕様です。
SOAP は、アプリケーションが HTTP 経由で情報を交換できるようにする単純な XML ベースのプロトコルです。
シンプル オブジェクト アクセス プロトコルは、軽量でシンプルな XML ベースの (標準ユニバーサル マークアップ言語のサブセット) プロトコルであり、WEB 上で構造化され、固定化された情報を交換するように設計されています。
その他の SOAP チュートリアルについては、http://www.w3cschool.cc/soap/soap-tutorial.html をご覧ください。
SOAP4R のインストール
SOAP4R は、Ruby SOAP アプリケーション用に、hiroshinakamura によって開発および実装されました。
SOAP4R ダウンロード アドレス: http://raa.ruby-lang.org/project/soap4r/。
注: お使いの Ruby 環境には、このコンポーネントがすでにインストールされている可能性があります。
このコンポーネントを Linux 環境にインストールするために gem を使用することもできます。コマンドは次のとおりです:
$ gem install soap4r --include-dependencies
Windows 環境で開発している場合は、zip ファイルをダウンロードし、install.rb を実行してインストールする必要があります。
SOAP4R サービス
SOAP4R は、次の 2 つの異なるサービス タイプをサポートします:
CGI/FastCGI サービスに基づく (SOAP::RPC::CGIStub)
独立したサービス (SOAP::RPC:StandaloneServer)
このチュートリアルでは、独立した SOAP サービスを作成する方法を紹介します。手順は次のとおりです:
ステップ 1 - SOAP::RPC::StandaloneServer を継承する
独自の独立したサーバーを実装するには、SOAP::RPC::StandaloneServer のサブクラスである新しいクラスを作成する必要があります。 :
class MyServer < SOAP::RPC::StandaloneServer ............... end
注: FastCGI ベースのサーバーを作成している場合は、SOAP::RPC::CGIStub クラスを継承する必要があり、プログラムの残りの部分は変更されません。
ステップ 2 - 処理メソッドを定義します
次に、Web サービスのメソッドを定義します。次のように、2 つの数値を加算するメソッドと、2 つの数値を除算するメソッドを定義します。
class MyServer < SOAP::RPC::StandaloneServer ............... # 处理方法 def add(a, b) return a + b end def div(a, b) return a / b end end
ステップ 3 - 公開します。処理メソッド
次に、サーバー上で定義したメソッドを追加します。初期化メソッドはパブリックであり、外部接続に使用されます:
class MyServer < SOAP::RPC::StandaloneServer def initialize(*args) add_method(receiver, methodName, *paramArg) end end
各パラメータの説明は次のとおりです:
パラメータ | 説明 |
---|---|
receiver | メソッド名を含むメソッドのオブジェクト。 同じクラスにサービスメソッドを定義する場合、パラメータはselfです。 |
methodName | RPC リクエストのメソッド名。 |
paramArg | パラメータ名とパラメータモード |
inout パラメーターと out パラメーターを理解するために、次のサービス メソッドを考えてみましょう。このメソッドでは、2 つのパラメーター inParam と inoutParam を入力する必要があります。関数の実行後、retVal、inoutParam、outParam:
def aMeth(inParam, inoutParam) retVal = inParam + inoutParam outParam = inParam . inoutParam inoutParam = inParam * inoutParam return retVal, inoutParam, outParam endの 3 つの値が返されます。 パブリック呼び出しメソッドは次のとおりです:
add_method(self, 'aMeth', [ %w(in inParam), %w(inout inoutParam), %w(out outParam), %w(retval return) ])ステップ 4 - サービスを開始します最後に、派生クラスをインスタンス化し、開始メソッドを呼び出すことによってサービスを開始します:
myServer = MyServer.new('ServerName', 'urn:ruby:ServiceName', hostname, port) myServer.start以下はリクエスト パラメーターの説明です:
説明 | |
---|---|
サーバー名 | サービス名、好きなものを選択できます|
urn:ruby:ServiceName | urn: Rubyは修正されていますが、サービスに固有のものを選択できます ServiceName |
hostname | ホスト名を指定します|
port | Webサービスポート
次に、独立したものを作成します上記の手順に従ってサービスを追加します。
require "soap/rpc/standaloneserver" begin class MyServer < SOAP::RPC::StandaloneServer # Expose our services def initialize(*args) add_method(self, 'add', 'a', 'b') add_method(self, 'div', 'a', 'b') end # Handler methods def add(a, b) return a + b end def div(a, b) return a / b end end server = MyServer.new("MyServer", 'urn:ruby:calculation', 'localhost', 8080) trap('INT){ server.shutdown } server.start rescue => err puts err.message end上記のプログラムを実行すると、ポート 8080 をリッスンするローカル サービスが開始され、add と div の 2 つのメソッドが公開されます。 上記のサービスをバックグラウンドで実行できます:
$ ruby MyServer.rb&
SOAP4R クライアント Ruby の SOAP::RPC::Driver クラスを使用して SOAP クライアントを開発します。次に、SOAP::RPC::Driver クラスの使用法を詳しく見てみましょう。 SOAP サービスを呼び出すには、次の情報が必要です:
- SOAP サービス URL アドレス (SOAP エンドポイント URL)
- サービス メソッド名前空間 (メソッド名前空間 URI)
- サービス メソッド名とパラメータ情報
SOAP::RPC::Driver.new(endPoint, nameSpace, soapAction)以下はパラメータの説明です:
Description | |
---|---|
endPoint | SOAP サービスに接続するための URL アドレス|
nameSpace | ネームスペースは、SOAP::RPC::Driver オブジェクトのすべての RPC に使用されます。|
soapAction | は、HTTP ヘッダーの SOAPAction フィールド値に使用されます。文字列が "" の場合、デフォルトはnil |
driver.add_method(name, *paramArg)以下はパラメータの説明です:
description | |
---|---|
name | リモートWebサービスのメソッド名|
paramAr g | プログラムのリモートパラメータを指定します