Направляющие - Используя интерфейс SOAP другого приложения

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

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

Какие шаги я должен выполнить?

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

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

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

7
задан kikito 27 January 2010 в 12:07
поделиться

1 ответ

РЕДАКТИРОВАТЬ: это устаревший ответ, датирующий рельсы 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 и т. д., использующие веб-сервис.

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

С уважением!

11
ответ дан 6 December 2019 в 23:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: