Ruby-web-services
Rubyを使用したWebサービス-SOAP4R
SOAPとは何ですか?
Simple Object Access Protocol(SOAP)は、XMLおよび通常(必ずしもではないが)HTTPに基づくクロスプラットフォームで言語に依存しないRPCプロトコルです。
XMLを使用してリモートプロシージャコールを行う情報をエンコードし、HTTPを使用してその情報をネットワークを介してクライアントからサーバーに、またはその逆に転送します。
SOAPには、COMやCORBAなどの他のテクノロジーに比べていくつかの利点があります。たとえば、比較的安価な展開とデバッグのコスト、拡張性と使いやすさ、さまざまな言語とプラットフォームの実装の存在などです。
詳細については、簡単なチュートリアルリンク:/soap/index [SOAP]を参照してください。
この章では、RubyのSOAP実装(SOAP4R)に精通しています。 これは基本的なチュートリアルであるため、詳細が必要な場合は、他のリソースを参照する必要があります。
SOAP4Rのインストール
SOAP4Rは、中村浩によって開発されたRubyのSOAP実装であり、以下からダウンロードできます-
注-このコンポーネントが既にインストールされている可能性があります。
Download SOAP
*gem* ユーティリティを知っている場合は、次のコマンドを使用してSOAP4Rおよび関連パッケージをインストールできます。
$ gem install soap4r --include-dependencies
Windowsで作業している場合は、上記の場所からzipファイルをダウンロードし、_ruby install.rb_を実行して標準のインストール方法を使用してインストールする必要があります。
SOAP4Rサーバーの作成
SOAP4Rは2種類のサーバーをサポートしています-
- CGI/FastCGIベース(SOAP :: RPC :: CGIStub)
- スタンドアロン(SOAP :: RPC:StandaloneServer)
この章では、スタンドアロンサーバーの記述について詳しく説明します。 以下のステップは、SOAPサーバーの作成に関係しています。
ステップ1-SOAP :: RPC :: StandaloneServerクラスを継承する
- 独自のスタンドアロンサーバーを実装するには、次のように_SOAP
- StandaloneServer_の子になる新しいクラスを作成する必要があります-
class MyServer < SOAP::RPC::StandaloneServer
...............
end
- 注-FastCGIベースのサーバーを作成する場合は、_SOAP
- RPC :: CGIStub_を親クラスとして使用する必要があります。残りの手順は同じです。
ステップ2-ハンドラーメソッドの定義
2番目のステップは、Webサービスメソッドを作成することです。これを外部に公開したいです。
これらは、単純なRubyメソッドとして作成できます。 たとえば、2つの数字を追加し、2つの数字を分割する2つの方法を書きましょう-
class MyServer < SOAP::RPC::StandaloneServer
...............
# Handler methods
def add(a, b)
return a + b
end
def div(a, b)
return a/b
end
end
ステップ3-ハンドラーメソッドの公開
次のステップは、定義済みのメソッドをサーバーに追加することです。 _initialize_メソッドは、次の2つのメソッドのいずれかでサービスメソッドを公開するために使用されます-
class MyServer < SOAP::RPC::StandaloneServer
def initialize(*args)
add_method(receiver, methodName, *paramArg)
end
end
ここにパラメータの説明があります-
Sr.No. | Parameter & Description |
---|---|
1 |
receiver methodNameメソッドを含むオブジェクト。 methodDefメソッドと同じクラスでサービスメソッドを定義します。このパラメーターは_self_です。 |
2 |
methodName RPC要求のために呼び出されるメソッドの名前。 |
3 |
paramArg 与えられた場合、パラメーター名とパラメーターモードを指定します。 |
inout_または_out_パラメーターの使用方法を理解するには、2つのパラメーター(inParamおよびinoutParam)を取り、1つの通常の戻り値(retVal)と2つの追加パラメーターを返す次のサービスメソッドを検討してください:_inoutParam_および_outParam-
def aMeth(inParam, inoutParam)
retVal = inParam + inoutParam
outParam = inParam . inoutParam
inoutParam = inParam * inoutParam
return retVal, inoutParam, outParam
end
今、私たちは次のようにこのメソッドを公開することができます-
add_method(self, 'aMeth', [
%w(in inParam),
%w(inout inoutParam),
%w(out outParam),
%w(retval return)
])
手順4-サーバーの起動
最後のステップは、派生クラスのインスタンスを1つインスタンス化し、 start メソッドを呼び出してサーバーを起動することです。
myServer = MyServer.new('ServerName', 'urn:ruby:ServiceName', hostname, port)
myServer.start
ここに必要なパラメータの説明があります-
Sr.No. | Parameter & Description |
---|---|
1 |
ServerName サーバー名、最も好きなものを与えることができます。 |
2 |
ここで、_urn:ruby_は定数ですが、このサーバーに一意のServiceName名を付けることができます。 |
3 |
hostname このサーバーがリッスンするホスト名を指定します。 |
4 |
port Webサービスに使用される使用可能なポート番号。 |
例
さて、上記の手順を使用して、1つのスタンドアロンサーバーを記述しましょう-
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
実行されると、このサーバーアプリケーションは_localhost_でスタンドアロンSOAPサーバーを起動し、port 8080でリクエストをリッスンします。 _add_と_div_という1つのサービスメソッドを公開します。これらのメソッドは2つのパラメーターを取り、結果を返します。
今、次のようにバックグラウンドでこのサーバーを実行することができます-
$ ruby MyServer.rb&
SOAP4Rクライアントの作成
- _SOAP
- RPC :: Driver_クラスは、SOAPクライアントアプリケーションの作成をサポートします。 この章では、このクラスについて説明し、アプリケーションに基づいてその使用方法を示します。
以下は、SOAPサービスを呼び出すために必要な最低限の情報です-
- SOAPサービスのURL(SOAPエンドポイントURL)。
- サービスメソッドの名前空間(メソッド名前空間URI)。 *サービスメソッドとそのパラメーターの名前。
次に、上記の例で定義された_add_および_div_という名前のサービスメソッドを呼び出すSOAPクライアントを作成します。
SOAPクライアントを作成する主な手順は次のとおりです。
手順1-SOAPドライバーインスタンスの作成
- 次のように新しいメソッドを呼び出して、_SOAP
- RPC :: Driver_のインスタンスを作成します-
SOAP::RPC::Driver.new(endPoint, nameSpace, soapAction)
ここに必要なパラメータの説明があります-
Sr.No. | Parameter & Description |
---|---|
1 |
接続するSOAPサーバーのURL。 |
2 |
nameSpace
|
3 |
soapAction HTTPヘッダーのSOAPActionフィールドの値。 nilの場合、これはデフォルトで空の文字列 ""になります。 |
ステップ2-サービスメソッドの追加
- SOAPサービスメソッドを_SOAP
- RPC :: Driver_に追加するには、_SOAP :: RPC :: Driver_インスタンスを使用して次のメソッドを呼び出します-
driver.add_method(name, *paramArg)
ここにパラメータの説明があります-
Sr.No. | Parameter & Description |
---|---|
1 |
name リモートWebサービスメソッドの名前。 |
2 |
paramArg リモートプロシージャのパラメータの名前を指定します。 |
ステップ3-SOAPサービスを呼び出す
- 最後の手順は、次のように_SOAP
- RPC :: Driver_インスタンスを使用してSOAPサービスに請求することです-
result = driver.serviceMethod(paramArg...)
ここで、_serviceMethod_は実際のWebサービスメソッドであり、_paramArg …_はサービスメソッドを渡すために必要なリストパラメーターです。
例
上記の手順に基づいて、次のようにSOAPクライアントを作成します-
#!/usr/bin/ruby -w
require 'soap/rpc/driver'
NAMESPACE = 'urn:ruby:calculation'
URL = 'http://localhost:8080/'
begin
driver = SOAP::RPC::Driver.new(URL, NAMESPACE)
# Add remote sevice methods
driver.add_method('add', 'a', 'b')
# Call remote service methods
puts driver.add(20, 30)
rescue => err
puts err.message
end
さらに読む
Rubyを使用したWebサービスの非常に基本的な概念だけを説明しました。 さらにドリルダウンする場合は、https://www.ruby-doc.org/stdlib/libdoc/soap/rdoc/indexl [Rubyを使用したWebサービス]で詳細を確認できる次のリンクがあります。