Frage

Ich habe eine reine, arbeitet, Rails-Anwendung.

Ich brauche es jetzt zu beginnen mit einer anderen Anwendung in Verbindung steht ( sympa ). Diese Anwendung entlarvt, dass macht eine SOAP-Schnittstelle , so macht es Sinn, dass ich versuche, es zu verwenden (die Kommandozeilen-Schnittstelle ist unvollständig).

Welche Schritte sollte ich folgen?

Was Edelstein / plugins soll ich verwenden?

Hat jemand arbeiten Tutorials / Beispiele?

Ich bin mehr oder weniger vertraut mit den allgemeinen SOAP-Konzepten, aber ich habe SOAP nie benutzt. Ich verstehe REST.

War es hilfreich?

Lösung

EDIT: Dies ist eine veraltete Antwort Datierung Schienen 2.x. Für eine vorliegende Antwort, empfehlen ich Railscast # 290 zu beobachten. Ich verlasse diese Antwort hier, falls jemand noch Schienen 2.x aus irgendeinem Grund verwenden, und kann nicht anwenden, was Ryan Bates sagt es.

Ich habe mit diesem für einige Tage zu kämpfen jetzt, und ich denke, dass ich eine Lösung selbst gefunden.

Die einfachste, aktivste Juwel, dass ich für SOAP-Interaktion finden könnte, ist Savon .

Es sollte an der Arbeit mit Rubin selbst. Hier ist eine kurze Tour, wie Sie es verwenden, mit Rails:

Installieren Sie das gem. Der einfachste Weg ist zu bearbeiten config / Umwelt und Add

config.gem "savon"

Und dann läuft

rake gems:install

Dies sollte savon zusammen mit einem paar mehr Steinen installieren.

Als Nächstes erstellen Sie eine Klasse auf Ihrem app/models/ Verzeichnis (es ist nicht eine Unterklasse von Active sein muss, nur eine ganz normale Klasse auf Ihren Modellen Verzeichnis)

Wenn Sie wie ich sind, werden Sie so weit weg wie möglich von XML bleiben wollen. Sie können dies tun, indem Sie eine Klasse wie diese zu erstellen:

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

Sie werden meist es Methoden zum Aufrufen verwendet werden. Die Art von Methoden werden Sie zum Aufruf der Lage sein, abhängig von den Leistungen, dass „die andere Seite“ zur Verfügung stellt. Stellen wir uns vor, dass drei Aktionen zur Verfügung stehen - :create_monkey, :destroy_monkey & :list_monkeys. Sie können bestätigen, dass die Liste, indem Sie diese auf den Schienen Konsole korrekt ist:

MyWebservice.soap_actions
=> [:create_monkey, :destroy_monkey, :list_monkeys]

Nun stell dir vor, dass Sie aufrufen möchten: create_monkey. Zunächst müssen Sie wissen, welche Parameter erforderlich sind, für diesen Anruf. Der beste Ort, dies zu betrachten ist die WSDL-Datei selbst. Sie sollten etwas wie diese:

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

So dauert es zwei Parameter: name und hair_color. Auf der Rubin-Konsole, können Sie es wie folgt aufrufen können:

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

Sie erhalten einen Hash als Antwort bekommen. In diesem Fall habe ich einen ‚ok‘ Status, aber es könnte sehr viel komplexer sein.

Später können Sie (zum Beispiel) erstellen tableless Modell genannt Monkey und definieren Methoden wie new, create, etc, die den Webservice nutzen.

Ich gehe aus vielen interessanten Dingen, wie zum Beispiel Sicherheit. Aber das sollten Sie gestartet, wenn Sie das gleiche Problem hatte ich.

Viele Grüße!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top