Ruby Web Service アプリケーション - SOAP4R
SOAP とは?
簡易オブジェクトアクセスプロトコル(SOAP、正式名称は Simple Object Access Protocol)は、データを交換するためのプロトコル仕様です。
SOAP は XML ベースのシンプルなプロトコルであり、アプリケーションが HTTP を介して情報を交換できるようにします。
簡易オブジェクトアクセスプロトコルは、データを交換するためのプロトコル仕様であり、軽量でシンプルな XML(SGMLのサブセット)ベースのプロトコルです。WEB上で構造化された固定情報を交換するように設計されています。
その他の SOAP チュートリアルはこちらを参照してください:http://www.w3cschool.cc/soap/soap-tutorial.html。
SOAP4R のインストール
SOAP4R は Hiroshi Nakamura によって開発・実装され、Ruby の SOAP アプリケーションに使用されます。
SOAP4R ダウンロード先:http://raa.ruby-lang.org/project/soap4r/。
注意:お使いの Ruby 環境には、このコンポーネントがすでにインストールされている可能性があります。
Linux 環境では、gem を使用してこのコンポーネントをインストールすることもできます。コマンドは次のとおりです:
Windows 環境で開発する場合は、zip 圧縮ファイルをダウンロードし、install.rb を実行してインストールする必要があります。
SOAP4R サービス
SOAP4R は2つの異なるサービス形式をサポートしています:
- CGI/FastCGI ベースのサービス (SOAP::RPC::CGIStub)
- 独立サービス (SOAP::RPC:StandaloneServer)
このチュートリアルでは、独立した SOAP サービスを構築する方法を紹介します。手順は次のとおりです:
ステップ1 - SOAP::RPC::StandaloneServer を継承
独自の独立サーバーを実装するには、SOAP::RPC::StandaloneServer のサブクラスである新しいクラスを作成する必要があります:
注意:FastCGI ベースのサーバーを作成する場合は、SOAP::RPC::CGIStub クラスを継承する必要があります。プログラムの残りの部分は変更されません。
ステップ2 - 処理メソッドを定義
次に、Web Service のメソッドを定義します。以下では、2つの数値を加算するメソッドと、2つの数値を除算するメソッドの2つを定義します:
ステップ3 - 処理メソッドを公開
次に、サーバー上で定義したメソッドを追加します。initialize メソッドは公開されており、外部からの接続に使用されます:
各パラメータの説明は以下のとおりです:
| パラメータ | 説明 |
|---|---|
| receiver | サービスメソッドを保持するオブジェクト。同じクラス内でサービスメソッドを定義する場合、このパラメータはself。 |
| methodName | RPC リクエストで呼び出すメソッド名。 |
| paramArg | パラメータ名とパラメータモード |
理解するためにinoutとoutパラメータについて、以下のサービスメソッドを考えてみましょう。2つのパラメータ inParam と inoutParam を入力として受け取り、関数の実行完了後に retVal、inoutParam、outParam の3つの値を返します:
公開された呼び出しメソッドは次のとおりです:
ステップ4 - サービスを開始
最後に、派生クラスをインスタンス化し、start メソッドを呼び出してサービスを起動します:
リクエストパラメータの説明は以下のとおりです:
| パラメータ | 説明 |
|---|---|
| ServerName | サービス名。お好みの名前を付けることができます |
| urn:ruby:ServiceName | Here urn:ruby固定されていますが、サービスに一意の名前を付けることができますServiceName |
| hostname | ホスト名を指定します |
| port | Web サービスポート |
実例
次に、上記の手順に従って、独立したサービスを作成します:
実例
上記のプログラムを実行すると、ポート 8080 を監視するローカルサービスが起動し、add と div の2つのメソッドが公開されます。
上記のサービスをバックグラウンドで実行できます:
$ ruby MyServer.rb &
SOAP4R クライアント
Ruby では、SOAP::RPC::Driver クラスを使用して SOAP クライアントを開発します。次に、SOAP::RPC::Driver クラスの使用方法を詳しく見ていきましょう。
SOAP サービスを呼び出すには、以下の情報が必要です:
- SOAP サービスの URL アドレス (SOAP Endpoint URL)
- サービスメソッドの名前空間(Method Namespace URI)
- サービスメソッド名とパラメータ情報
次に、ステップバイステップで SOAP クライアントを作成し、上記の SOAP メソッド add、div を呼び出してみましょう:
ステップ1 - SOAP Driver インスタンスを作成
SOAP::RPC::Driver クラスをインスタンス化することで、その新しいメソッドを呼び出すことができます。以下のようになります:
SOAP::RPC::Driver.new(endPoint, nameSpace, soapAction)
パラメータの説明は以下のとおりです:
| パラメータ | 説明 |
|---|---|
| endPoint | SOAP サービスに接続する URL アドレス |
| nameSpace | SOAP::RPC::Driver オブジェクトのすべての RPC に使用される名前空間。 |
| soapAction | HTTP ヘッダーの SOAPAction フィールド値に使用されます。文字列が "" の場合、デフォルトはnil |
ステップ2 - サービスメソッドを追加
SOAP::RPC::Driver に SOAP サービスメソッドを追加するには、SOAP::RPC::Driver のインスタンスを使用して以下のメソッドを呼び出します:
driver.add_method(name, *paramArg)
パラメータの説明は以下のとおりです:
| パラメータ | 説明 |
|---|---|
| name | リモート Web サービスのメソッド名 |
| paramArg | リモートプログラムのパラメータを指定します |
ステップ3 - SOAPサービスを呼び出す
最後に、SOAP::RPC::Driver インスタンスを使用して SOAP サービスを呼び出すことができます:
result = driver.serviceMethod(paramArg...)
serviceMethod は SOAP サービスの実際のメソッド名で、paramArg はメソッドのパラメータリストです。
実例
上記の手順に基づいて、以下の SOAP クライアントを作成できます:
実例
以上、Ruby の Web Service について簡単に紹介しました。さらに詳しく知りたい場合は、公式ドキュメントを参照してください:Ruby の Web Service
その他の拡張