Pregunta

Tengo un, trabajo, pura aplicación Rails.

Ahora se necesita para empezar a comunicarse con otra aplicación ( sympa ). Esta aplicación expone que expone un interfaz SOAP , así que tiene sentido que yo trato de usarlo (el interfaz de línea de comandos es incompleta).

¿Qué pasos debo seguir?

¿Qué gemas / plugins deben usar?

¿alguien tiene tutoriales de trabajo / ejemplos?

Estoy más o menos familiarizados con los conceptos generales jabón, pero nunca he usado jabón antes. Entiendo RESTO.

¿Fue útil?

Solución

EDIT: esta es una respuesta obsoleta que data de los carriles 2.x. Para una respuesta más presente, se lo recomiendo a ver Railscast # 290 . Me voy de esta respuesta aquí por si alguien todavía está utilizando rieles 2.x por alguna razón, y no se puede aplicar lo que Ryan Bates dice allí.

He estado luchando con esto durante algunos días y creo que he encontrado una solución a mí mismo.

El más simple, la gema más activo que he podido encontrar para la interacción de SOAP se llama Savon .

Se supone que el trabajo con la propia Ruby. He aquí un rápido recorrido sobre cómo se utiliza con rieles:

Instalar la gema. Lo más fácil es editar config / medio ambiente y complemento

config.gem "savon"

Y a continuación, ejecute

rake gems:install

Esto debe instalar Savon junto con un par de piedras preciosas más.

A continuación, cree una clase en su directorio app/models/ (que no tiene por qué ser una subclase de ActiveRecord, sólo una clase regular en sus modelos de directorio)

Si usted es como yo, tendrá que permanecer lo más lejos posible de XML. Puede hacerlo mediante la creación de una clase como ésta:

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

será principalmente usarlo para invocar métodos. El tipo de métodos usted será capaz de invocar depende de los servicios que "el otro sitio" proporciona. Imaginemos que 3 acciones están disponibles - :create_monkey, :destroy_monkey y :list_monkeys. Puede confirmar que la lista es correcta al hacer esto en la consola rieles:

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

Ahora imagine que desea invocar: create_monkey. En primer lugar usted necesita saber qué parámetros son necesarios para esa llamada. El mejor lugar para mirar esto es el archivo WSDL en sí. Debería ver algo como esto:

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

Así que toma dos parámetros: name y hair_color. En la consola de rubí, se puede invocar como esto:

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

Se obtendrá un hash como respuesta. En este caso tengo una condición de 'bien', pero podría ser mucho más complejo.

Más tarde, puede crear (por ejemplo) un modelo sin tablas llama Monkey y definir métodos como new, create, etc que utilizan el servicio web.

Me voy a cabo un montón de cosas interesantes, como la seguridad. Pero esto debe ir abriendo boca si tiene el mismo problema que tuve.

Saludos!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top