Railsの - 別のアプリケーションのSOAPインタフェースを使用

StackOverflow https://stackoverflow.com/questions/2146669

  •  23-09-2019
  •  | 
  •  

質問

私は、純粋な、働く、Railsアプリケーションを持っています。

私は今、それが他のアプリケーションとの通信( Sympaのの)を開始する必要があります。このアプリケーションが公開することが公開A SOAPインタフェースに、それは私がそれを(使用しようという意味がありますので、コマンド・ライン・インターフェース)不完全である。

私は従うべき手順?

宝石/プラグインは、私が使うべきか?

ん、誰もがチュートリアル/例が働いている?

私は、多かれ少なかれ一般的なSOAPの概念を理解し、私は前にSOAPを使用したことがありませんよ。私はRESTを理解します。

役に立ちましたか?

解決

編集:これは、レール2.xのの時代遅れの回答デートですより多くの存在の回答については、私は railscast#290 のを見てすることをお勧めいたします。私は誰かがまだいくつかの理由のためのレール2.xのを使用している、とライアンベイツが言う適用することはできません場合には、ここでこの答えを残しています。

私は今、いくつかの日のためにこれで戦ってきたと私は私が解決策を見つけた自分自身だと思います。

私はSOAPの相互作用のために見つけることができることを最も簡単な、最も活発な宝石は、サボンに呼ばれています。

はそれはルビー自体で動作するようになっています。ここでは、Railsのとそれを使う方法についてのクイックツアーです:

宝石をインストールします。最も簡単な方法は、編集のconfig /環境にあると

を追加
config.gem "savon"
その後、

実行
rake gems:install

このカップルより多くの宝石と一緒にサボンをインストールする必要があります。

次に、あなたのapp/models/ディレクトリにクラスを作成します(これは、ActiveRecordのサブクラスであるためにあなたのモデルのディレクトリ上の普通のクラスを持っていません)。

あなたは私のような場合は、

、あなたは遠くXMLから可能な限り滞在したいと思うでしょう。あなたはこのようなクラスを作成することによって、そうすることができます:

class MyWebservice

  WSDL = "http://www.theWebSiteWithAService.com/wsdl"

  def self.client
    @@client ||= Savon::Client.new(WSDL)
  end

  def self.soap_actions
    return client.wsdl.soap_actions
  end

  def self.invoke(action, parameters)
    response = client.send(action) { |soap| soap.body = parameters }
    return response.to_hash
  end

end

あなたは、ほとんどのメソッドを呼び出すためにそれを使用することになります。あなたが呼び出すことができるようになる方法の種類は、「他のサイトには、」提供するサービスに依存します。 :create_monkey:destroy_monkey:list_monkeys - の3つのアクションが利用可能であることを想像してみましょう。

:あなたは、リストは、レールのコンソール上でこれを行うことにより、正しいことを確認することができます
MyWebservice.soap_actions
=> [:create_monkey, :destroy_monkey, :list_monkeys]
create_monkeyを:

これで呼び出したいことを想像してください。まず、あなたはそのコールのために必要とされるパラメータを知る必要があります。これを見てするのに最適な場所は、WSDLファイルそのものです。あなたはこのようなものが表示されるはずです。

<message name="create_monkey_request">
  <part name="name" type="xsd:string"/>
  <part name="hair_color" type="xsd:string"/>
</message>
<message name="create_monkey_response">
  <part name="status" type="xsd:string"/>
</message>
namehair_colorだから、2つのパラメータを取ります。ルビーコンソールで、あなたはこのようにそれを呼び出すことができます:

MyWebService.invoke :create_monkey, {:name => 'frank', :hair_color => 'red' }
=> {:status => 'ok'}

あなたは応答としてハッシュを取得します。この場合、私は、「OK」のステータスを得たが、それははるかに複雑になる可能性があります。

Monkeyと呼ばれる

後で、あなたは(たとえば)を作成することができ、A テーブルなしモデルに、およびWebサービスを使用するなどnewcreate、のようなメソッドを定義します。

私は、セキュリティなどの興味深い、多くのを残しています。あなたは私が持っていた同じ問題を持っている場合しかし、これは、あなたが始める必要があります。

よろしく!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top