Pergunta

Eu tenho uma aplicação pura e trabalhadora de Rails.

Agora preciso disso para começar a se comunicar com outro aplicativo (Sympa). Este aplicativo expõe que expõe um Interface de sabão, então faz sentido que eu tento usá -lo (a interface da linha de comando está incompleta).

Quais etapas devo seguir?

Quais gems/plugins devo usar?

Alguém tem tutoriais / exemplos de trabalho?

Estou mais ou menos familiarizado com os conceitos gerais de sabão, mas nunca usei sabão antes. Eu entendo descanso.

Foi útil?

Solução

EDIT: Esta é uma resposta desatualizada datada de trilhos 2.x. Para uma resposta mais presente, eu recomendo que você assista Railscast #290 . Estou deixando esta resposta aqui, caso alguém ainda esteja usando o Rails 2.x por algum motivo e não possa aplicar o que Ryan Bates diz lá.

Estou lutando com isso há alguns dias e acho que encontrei uma solução.

A jóia mais simples e ativa que eu pude encontrar para a interação SOAP é chamada Savon.

Deveria trabalhar com o próprio Ruby. Aqui está um rápido tour sobre como você o usa com o Rails:

Instale a gema. A maneira mais fácil é editar configuração/ambiente e adicionar

config.gem "savon"

E depois corra

rake gems:install

Isso deve instalar o Savon junto com mais algumas jóias.

Em seguida, crie uma aula em seu app/models/ Diretório (não precisa ser uma subclasse do ActiveRecord, apenas uma aula regular no diretório de modelos)

Se você é como eu, você vai querer ficar o mais longe possível do XML. Você pode fazer isso criando uma aula como esta:

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

Você o usará principalmente para chamar métodos. O tipo de método que você poderá invocar depende dos serviços que "o outro site" fornece. Vamos imaginar que três ações estão disponíveis - :create_monkey, :destroy_monkey & :list_monkeys. Você pode confirmar que a lista está correta ao fazer isso no console do Rails:

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

Agora imagine que você deseja invocar: create_monkey. Primeiro, você precisa saber quais parâmetros são necessários para essa chamada. O melhor lugar para olhar para isso é o próprio arquivo WSDL. Você deve ver algo assim:

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

Então, são necessários dois parâmetros: name e hair_color. No console do rubi, você pode invocar assim:

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

Você receberá um hash como resposta. Nesse caso, obtive um status de 'OK', mas pode ser muito mais complexo.

Mais tarde, você pode criar (por exemplo) um Modelo sem mesa chamado Monkey, e definir métodos como new, create, etc que usam o serviço da web.

Estou deixando de fora muitas coisas interessantes, como a segurança. Mas isso deve começar, se tiver o mesmo problema que eu tive.

Cumprimentos!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top