Ruby-web-services

提供:Dev Guides
移動先:案内検索

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 &plus; 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 &plus; 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

ここで、_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 &plus; 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
  • 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)

ここにパラメータの説明があります-

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サービス]で詳細を確認できる次のリンクがあります。