Question

J'ai un pur travail, l'application Rails.

J'ai besoin maintenant de commencer à communiquer avec une autre application ( sympa). Cette application expose qui expose une interface SOAP , donc il est logique que j'essaie de l'utiliser (la une interface de ligne de commande est incomplète).

Quelles étapes dois-je suivre?

Qu'est-ce que GEMS / plugins dois-je utiliser?

Quelqu'un at-il des tutoriels de travail / exemples?

Je suis plus ou moins familier avec les concepts SOAP généraux, mais je ne l'ai jamais utilisé SOAP avant. Je comprends REST.

Était-ce utile?

La solution

EDIT: ceci est une rencontre de réponse dépassée de rails 2.x. Pour une réponse plus présente, je vous recommande de regarder Railscast # 290 . Je laisse cette réponse ici au cas où quelqu'un est encore en utilisant des rails 2.x pour une raison quelconque, et ne peut pas appliquer ce que Ryan Bates dit là-bas.

Je me bats avec ce depuis quelques jours et je pense que je me suis trouvé une solution.

Le plus simple, le plus petit bijou actif que je pouvais trouver pour l'interaction SOAP est appelée Savon.

Il est censé fonctionner avec Ruby lui-même. Voici un rapide tour sur la façon dont vous l'utilisez avec Rails:

Installer la gemme. Plus simple est de modifier config / environnement et ajouter

config.gem "savon"

Et puis exécutez

rake gems:install

Cela devrait installer avec un savon quelques autres pierres précieuses.

Ensuite, créez une classe sur votre répertoire app/models/ (il ne doit pas être une sous-classe de ActiveRecord, juste une classe régulière sur votre répertoire modèles)

Si vous êtes comme moi, vous voulez rester aussi loin que possible XML. Vous pouvez le faire en créant une classe comme celle-ci:

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

Vous la plupart du temps à l'utiliser pour invoquer des méthodes. Le genre de méthodes que vous serez en mesure d'invoquer dépend des services que « l'autre site » fournit. Imaginons que 3 actions sont disponibles - :create_monkey, :destroy_monkey & :list_monkeys. Vous pouvez confirmer que la liste est correcte en faisant cela sur la console de rails:

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

Maintenant, imaginez que vous voulez invoquer: create_monkey. D'abord, vous devez savoir quels paramètres sont nécessaires pour cet appel. Le meilleur endroit pour regarder c'est le fichier wsdl lui-même. Vous devriez voir quelque chose comme ceci:

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

Il faut donc deux paramètres: name et hair_color. Sur la console rubis, vous pouvez l'appeler comme ceci:

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

Vous obtiendrez un hachage comme une réponse. Dans ce cas, je suis un statut « ok », mais il pourrait être beaucoup plus complexe.

Par la suite, vous pouvez créer (par exemple) un modèle tableless appelé Monkey et définir des méthodes telles que new, create, etc qui utilisent le service web.

Je pars à beaucoup de choses intéressantes, comme la sécurité. Mais cela devrait vous aider à démarrer si vous avez le même problème que moi.

Cordialement!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top