У меня есть чистое, работа, приложение направляющих.
Мне теперь нужен он, чтобы начать общаться с другим приложением (sympa). Это приложение представляет, который представляет интерфейс SOAP, таким образом, оно имеет смысл, что я пытаюсь использовать его (интерфейс командной строки является неполным).
Какие шаги я должен выполнить?
Какие драгоценные камни/плагины я должен использовать?
У кого-либо есть рабочие учебные руководства / примеры?
Я более или менее знаком с общими понятиями SOAP, но я никогда не использовал SOAP прежде. Я понимаю REST.
РЕДАКТИРОВАТЬ: это устаревший ответ, датирующий рельсы 2.x. Чтобы получить более точный ответ, я рекомендую вам посмотреть railscast # 290 . Я оставляю этот ответ здесь на тот случай, если кто-то по какой-то причине все еще использует rails 2.x и не может применить то, что там говорит Райан Бейтс.
Я борюсь с этим уже несколько дней и думаю, что сам нашел решение.
Самый простой и активный гем, который я смог найти для взаимодействия с SOAP, называется Savon .
Предполагается, что он будет работать с самим Ruby. Вот краткий обзор того, как вы используете его с 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
и т. д., использующие веб-сервис.
Я упускаю много интересного, например, безопасность. Но это должно помочь вам начать, если у вас такая же проблема, как и у меня.
С уважением!