Ruby Webサービス



石鹸とは何ですか?

Simple Object Access Protocol (SOAP、略称 Simple Object Access Protocol) は、データを交換するためのプロトコル仕様です。

SOAP は、アプリケーションが HTTP 経由で情報を交換できるようにする単純な XML ベースのプロトコルです。

シンプル オブジェクト アクセス プロトコルは、軽量でシンプルな XML ベースの (標準ユニバーサル マークアップ言語のサブセット) プロトコルであり、WEB 上で構造化され、固定化された情報を交換するように設計されています。

その他の SOAP チュートリアルについては、http://www.w3cschool.cc/soap/soap-tutorial.html をご覧ください。


SOAP4R のインストール

SOAP4R は、Ruby SOAP アプリケーション用に、hiroshinakamura によって開発および実装されました。

SOAP4R ダウンロード アドレス: http://raa.ruby-lang.org/project/soap4r/。

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

このコンポーネントを Linux 環境にインストールするために gem を使用することもできます。コマンドは次のとおりです:

$ 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::RPC::StandaloneServer のサブクラスである新しいクラスを作成する必要があります。 :

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

注: FastCGI ベースのサーバーを作成している場合は、SOAP::RPC::CGIStub クラスを継承する必要があり、プログラムの残りの部分は変更されません。

ステップ 2 - 処理メソッドを定義します

次に、Web サービスのメソッドを定義します。次のように、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 - 公開します。処理メソッド

次に、サーバー上で定義したメソッドを追加します。初期化メソッドはパブリックであり、外部接続に使用されます:

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

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

パラメータ説明
receiverメソッド名を含むメソッドのオブジェクト。 同じクラスにサービスメソッドを定義する場合、パラメータはselfです。
methodName RPC リクエストのメソッド名。
paramArgパラメータ名とパラメータモード

inout パラメーターと out パラメーターを理解するために、次のサービス メソッドを考えてみましょう。このメソッドでは、2 つのパラメーター inParam と inoutParam を入力する必要があります。関数の実行後、retVal、inoutParam、outParam:

def aMeth(inParam, inoutParam)
   retVal = inParam + inoutParam
   outParam = inParam . inoutParam
   inoutParam = inParam * inoutParam
   return retVal, inoutParam, outParam
end
の 3 つの値が返されます。

パブリック呼び出しメソッドは次のとおりです:

add_method(self, 'aMeth', [
    %w(in inParam),
    %w(inout inoutParam),
    %w(out outParam),
    %w(retval return)
])

ステップ 4 - サービスを開始します

最後に、派生クラスをインスタンス化し、開始メソッドを呼び出すことによってサービスを開始します:

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

myServer.start

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

パラメータ説明サービス名、好きなものを選択できますホスト名を指定しますWebサービスポート
サーバー名
urn:ruby:ServiceNameurn: Rubyは修正されていますが、サービスに固有のものを選択できます ServiceName
hostname
port
Instance

次に、独立したものを作成します上記の手順に従ってサービスを追加します。

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

上記のプログラムを実行すると、ポート 8080 をリッスンするローカル サービスが開始され、add と div の 2 つのメソッドが公開されます。

上記のサービスをバックグラウンドで実行できます:

$ ruby MyServer.rb&


SOAP4R クライアント

Ruby の SOAP::RPC::Driver クラスを使用して SOAP クライアントを開発します。次に、SOAP::RPC::Driver クラスの使用法を詳しく見てみましょう。

SOAP サービスを呼び出すには、次の情報が必要です:

  • SOAP サービス URL アドレス (SOAP エンドポイント URL)

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

  • サービス メソッド名とパラメータ情報

次に、上記の SOAP メソッドを呼び出すための SOAP クライアントを段階的に作成します: add、div:

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

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

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

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

パラメータ Description SOAP サービスに接続するための URL アドレス ネームスペースは、SOAP::RPC::Driver オブジェクトのすべての RPC に使用されます。 は、HTTP ヘッダーの SOAPAction フィールド値に使用されます。文字列が "" の場合、デフォルトは
endPoint
nameSpace
soapActionnil
ステップ 2 - サービス メソッドの追加

SOAP サービス メソッドを SOAP::RPC::Driver に追加します。 SOAP::RPC:: Driver をインスタンス化できます。次のメソッドを呼び出します:

driver.add_method(name, *paramArg)

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

parameter descriptionリモートWebサービスのメソッド名プログラムのリモートパラメータを指定します

ステップ 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 サービス

name
paramAr g