English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Ruby Web ServiceアプリSOAP4R

SOAPとは何ですか?

シンプルオブジェクトアクセスプロトコル(SOAP、Simple Object Access Protocolの略)はデータ交換のためのプロトコル規格です。

SOAPはシンプルなXMLに基づくプロトコルで、アプリケーションがHTTPを通じて情報を交換するために使用されます。

シンプルオブジェクトアクセスプロトコルはデータ交換のためのプロトコル規格であり、軽量でシンプルなXML(標準一般マークアップ言語の一部)に基づくプロトコルで、ウェブ上での構造化された固定情報の交換に設計されています。

SOAP4Rのインストール

SOAP4RはHiroshi Nakamuraによって開発・実装され、RubyのSOAPアプリケーションに使用されます。

SOAP4Rのダウンロード先:http://raa.ruby-lang.org/project/soap4r/

注意:あなたのRuby環境には、既にこのコンポーネントがインストールされている可能性があります。

Linux環境では、以下のコマンドを使用してこのコンポーネントをインストールできます:

gem install soap4r --include-依存関係

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 Serviceのメソッドを定義します。以下のように、2つのメソッドを定義します。一つは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ステップ - 処理メソッドを公開します

次に、サーバー上で定義したメソッドを追加します。initialize メソッドは公開であり、外部の接続に使用されます:

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

以下は各パラメータの説明です:

パラメータ説明
receiverメソッド名を含むオブジェクト。同じクラス内でサービスメソッドを定義する場合、このパラメータは self
methodNameRPC リクエストのメソッド名を呼び出します。
paramArgパラメータ名とパラメータモード

理解するためには inout および out パラメータ、以下のサービスメソッドを考慮し、2つのパラメータ: inParam と inoutParam を入力する必要があります。関数が実行されると、3つの値が返されます:retVal、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ステップ - サービスを開始

最後に、派生クラスを例示し、startメソッドを呼び出してサービスを起動します:

myServer = MyServer.new('ServerName',
                        'urn:ruby:ServiceName', hostname, port)
 
myServer.start

以下はリクエストパラメータの説明です:

パラメータ説明
ServerNameサービス名を設定します。好きな名前を指定できます。
urn:ruby:ServiceNameここでは urn:ruby は固定ですが、あなたのサービスにユニークな名前を付けることができます。 ServiceName
hostnameホスト名を指定
portウェブサービスのポート

オンラインサンプル

次に、以下の手順で独立したサービスを作成します:

オンラインサンプル

require "soap/rpc/standaloneserver"
 
begin
   class MyServer < SOAP::RPC::StandaloneServer
 
      # サービスを公開
      def initialize(*args)
         add_method(self, 'add', 'a', 'b')
         add_method(self, 'div', 'a', 'b')
      end
 
      # ハンドラメソッド
      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 Endpoint URL)

  • サービスメソッドの名前空間(Method Namespace URI)

  • サービスメソッド名及び引数情報

次に、以下のSOAPメソッドを呼び出すためにSOAPクライアントを作成する手順を一つずつ説明します:add、div:

第1ステップ - SOAP Driverサンプルの作成

SOAP::RPC::Driverクラスをインスタンス化して新しいメソッドを呼び出すことができます。以下のように示します:

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

以下はパラメータの説明です:

パラメータ説明
endPointSOAPサービスのURLアドレス
nameSpacenameSpaceはSOAP::RPC::DriverオブジェクトのすべてのRPCに使用される名前空間です。
soapActionHTTPヘッダの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クライアントを書けることができます:

オンラインサンプル

#!/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サービス