Rails - использование SOAP-интерфейса другого приложения - PullRequest
7 голосов
/ 27 января 2010

У меня есть чистое работающее приложение Rails.

Теперь мне нужно начать общение с другим приложением ( sympa ). Это приложение предоставляет интерфейс SOAP , поэтому имеет смысл использовать его (интерфейс командной строки неполон).

Каким шагам мне следует следовать?

Какие гемы / плагины я должен использовать?

У кого-нибудь есть рабочие учебники / примеры?

Я более или менее знаком с общими концепциями SOAP, но раньше никогда не использовал SOAP. Я понимаю REST.

1 Ответ

11 голосов
/ 29 января 2010

РЕДАКТИРОВАТЬ: это устаревший ответ датировки рельсов 2.x. Для более актуального ответа я рекомендую посмотреть railscast # 290 . Я оставляю этот ответ здесь на тот случай, если кто-то по какой-то причине все еще использует rails 2.x и не может применить то, что там говорит Райан Бейтс.

Я борюсь с этим уже несколько дней и думаю, что нашел решение сам.

Самый простой, самый активный камень, который я смог найти для взаимодействия с SOAP, называется Savon .

Он должен работать с самим Руби. Вот краткий обзор того, как вы используете его с Rails:

Установите драгоценный камень. Самый простой способ - отредактировать config / environment и добавить

config.gem "savon"

А потом запустить

rake gems:install

Это должно установить savon вместе с еще парой драгоценных камней.

Затем создайте класс в каталоге app/models/ (он не должен быть подклассом ActiveRecord, просто обычный класс в каталоге моделей)

Если вы похожи на меня, вам захочется держаться как можно дальше от XML. Вы можете сделать это, создав такой класс:

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

Вы будете в основном использовать его для вызова методов. Тип методов, которые вы сможете использовать, зависит от услуг, предоставляемых «другим сайтом». Давайте представим, что доступно 3 действия - :create_monkey, :destroy_monkey & :list_monkeys. Вы можете подтвердить правильность списка, выполнив это на консоли rails:

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

Теперь представьте, что вы хотите вызвать: create_monkey. Для начала вам необходимо узнать, какие параметры необходимы для этого вызова. Лучше всего на это посмотреть сам файл wsdl. Вы должны увидеть что-то вроде этого:

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

Таким образом, он принимает два параметра: name и hair_color. На консоли ruby ​​вы можете вызвать ее так:

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

Вы получите хеш в ответ. В этом случае я получил статус «ОК», но это может быть гораздо сложнее.

Позже вы можете создать (например) модель без таблицы с именем Monkey и определить методы, такие как new, create и т. Д., Которые используют веб-сервис.

Я опускаю много интересных вещей, таких как безопасность. Но это должно помочь вам начать, если у вас возникла та же проблема, что и у меня.

Привет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...