Rubyを使用したWebサービス-SOAP4R

SOAPとは何ですか?

Simple Object Access Protocol(SOAP)は、クロスプラットフォームで言語に依存しないRPCプロトコルであり、XMLと、通常は(必ずしもそうとは限りませんが)HTTPに基づいています。

XMLを使用してリモートプロシージャコールを行う情報をエンコードし、HTTPを使用してその情報をネットワーク経由でクライアントからサーバーに(またはその逆に)転送します。

SOAPには、COM、CORBAなどの他のテクノロジに比べていくつかの利点があります。たとえば、比較的安価な展開とデバッグのコスト、拡張性と使いやすさ、さまざまな言語とプラットフォーム用のいくつかの実装の存在などです。

詳細については、簡単なチュートリアルSOAPを参照してください。

この章では、RubyのSOAP実装(SOAP4R)について理解します。これは基本的なチュートリアルであるため、詳細が必要な場合は、他のリソースを参照する必要があります。

SOAP4Rのインストール

SOAP4Rは、中村宏によって開発されたRubyのSOAP実装であり、-からダウンロードできます。

NOTE −このコンポーネントをすでにインストールしている可能性が高いです。

Download SOAP

あなたが知っているなら gem ユーティリティの場合、次のコマンドを使用して、SOAP4Rおよび関連パッケージをインストールできます。

$ 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 :: StandaloneServerの子となる新しいクラスを次のように作成する必要があります。

class MyServer < SOAP::RPC::StandaloneServer
  ...............
end

NOTE− 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-ハンドラメソッドを公開する

次のステップは、定義したメソッドをサーバーに追加することです。初期化方法は、次の二つの方法のいずれかでサービスメソッドを公開するために使用されます-

class MyServer < SOAP::RPC::StandaloneServer
   def initialize(*args)
      add_method(receiver, methodName, *paramArg)
   end
end

パラメータの説明は次のとおりです-

シニア番号 パラメータと説明
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

必要なパラメータの説明は次のとおりです-

シニア番号 パラメータと説明
1

ServerName

サーバー名、あなたはあなたが最も好きなものを与えることができます。

2

urn:ruby:ServiceName

ここで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

実行されると、このサーバーアプリケーションはローカルホストでスタンドアロンSOAPサーバーを起動し、ポート8080で要求をリッスンします。2つのパラメーターを取り、結果を返す1つのサービスメソッドadddivを公開します。

これで、次のようにこのサーバーをバックグラウンドで実行できます。

$ ruby MyServer.rb&

SOAP4Rクライアントの作成

SOAP :: RPC ::ドライバー・クラスは、SOAPクライアントアプリケーションを記述するためのサポートを提供します。この章では、このクラスについて説明し、アプリケーションに基づいてその使用法を示します。

以下は、SOAPサービスを呼び出すために必要な最低限の情報です。

  • SOAPサービスのURL(SOAPエンドポイントURL)。
  • サービスメソッドの名前空間(メソッド名前空間URI)。
  • サービスメソッドの名前とそのパラメータ。

ここで、上記の例で定義されたaddおよびdivという名前のサービスメソッドを呼び出すSOAPクライアントを作成します。

SOAPクライアントを作成するための主な手順は次のとおりです。

ステップ1-SOAPドライバーインスタンスを作成する

次のように新しいメソッドを呼び出すことにより、SOAP :: RPC :: Driverのインスタンスを作成します-

SOAP::RPC::Driver.new(endPoint, nameSpace, soapAction)

必要なパラメータの説明は次のとおりです-

シニア番号 パラメータと説明
1

endPoint

接続するSOAPサーバーのURL。

2

nameSpace

このSOAP :: RPC :: Driverオブジェクトで実行されるすべてのRPCに使用する名前空間。

3

soapAction

HTTPヘッダーのSOAPActionフィールドの値。nilの場合、これはデフォルトで空の文字列 ""になります。

ステップ2-サービスメソッドを追加する

SOAPサービスメソッドをSOAP :: RPC :: Driverに追加するには、SOAP :: RPC :: Driverインスタンスを使用して次のメソッドを呼び出すことができます。

driver.add_method(name, *paramArg)

パラメータの説明は次のとおりです-

シニア番号 パラメータと説明
1

name

リモートWebサービスメソッドの名前。

2

paramArg

リモートプロシージャのパラメータの名前を指定します。

ステップ3-SOAPサービスを呼び出す

最後のステップは、SOAP :: RPC :: Driverインスタンスを使用してSOAPサービスに次のように請求することです。

result = driver.serviceMethod(paramArg...)

ここで、serviceMethodは実際のWebサービスメソッドであり、paramArg ...はサービスメソッドを渡すために必要なリストパラメーターです。

Example

上記の手順に基づいて、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サービスの非常に基本的な概念について説明しました。さらにドリルダウンしたい場合は、Rubyを使用したWebサービスの詳細を見つけるための次のリンクがあります。