Domanda

Ho un puro, di lavoro, Rails applicazione.

Adesso mi serve per iniziare a comunicare con un'altra applicazione ( sympa ). Questa applicazione espone che espone un'interfaccia SOAP rel="noreferrer"> , quindi ha senso che io cerco di usarlo (il CLI è incompleto).

Quali passi devo seguire?

Quali gemme / plugins devo usare?

Qualcuno ha lavoro tutorial / Esempi?

Sono più o meno familiarità con i concetti generali sapone, ma non ho mai usato sapone prima. Capisco REST.

È stato utile?

Soluzione

EDIT: questa è una risposta obsoleto datazione di rotaie 2.x. Per una risposta più attuale, vi consiglio di guardare Railscast # 290 . Lascio questa risposta qui in caso qualcuno sta ancora utilizzando rotaie 2.x per qualche ragione, e non posso applicare quello che Ryan Bates dice che c'è.

Ho combattuto con questo per qualche giorno e credo che mi sono trovato una soluzione.

Il più semplice, gemma più attivo che ho potuto trovare per l'interazione SOAP è chiamato Savon .

che si suppone di lavorare con Ruby stessa. Ecco un rapido giro su come lo si utilizza con Rails:

Installare la gemma. Il modo più semplice è quello di modificare config / ambiente e aggiungere

config.gem "savon"

E quindi eseguire

rake gems:install

Questo dovrebbe installare savon insieme ad un altro paio di gemme.

Successivamente, creare una classe nella directory app/models/ (non deve essere una sottoclasse di ActiveRecord, solo una classe normale nella directory modelli)

Se siete come me, si vuole stare il più lontano da XML possibile. Puoi farlo creando una classe come questa:

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

Sarà in gran parte utilizzando per invocare i metodi. Il tipo di metodi che sarà in grado di richiamare dipende dai servizi che "l'altro sito" fornisce. Immaginiamo che 3 azioni sono disponibili - :create_monkey, :destroy_monkey & :list_monkeys. È possibile confermare che la lista è corretta in questo modo sulla console rotaie:

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

Ora immaginate che si vuole invocare: create_monkey. In primo luogo è necessario sapere quali parametri sono necessari per tale chiamata. Il posto migliore per guardare a questo è il file WSDL in sé. Si dovrebbe vedere qualcosa di simile:

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

Quindi ci vogliono due parametri: name e hair_color. Sulla console rubino, è possibile richiamare in questo modo:

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

Si otterrà un hash come una risposta. In questo caso ho ottenuto uno status 'ok', ma potrebbe essere molto più complesso.

In seguito, è possibile creare (ad esempio) un modello tableless chiamato Monkey , e definire metodi come new, create, etc che utilizzano il webservice.

Sto lasciando fuori un sacco di cose interessanti, come la sicurezza. Ma questo dovrebbe iniziare se avete lo stesso problema che ho avuto.

Saluti!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top