Rails – использование интерфейса SOAP другого приложения

StackOverflow https://stackoverflow.com/questions/2146669

  •  23-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

Это было полезно?

Решение

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

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

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

Предполагается, что он будет работать с самим Ruby.Вот краткий обзор того, как его использовать с Rails:

Установите драгоценный камень.Самый простой способ — отредактировать конфигурацию/среду и добавить

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.Вы можете убедиться в правильности списка, выполнив это в консоли рельсов:

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, и т. д., которые используют веб-сервис.

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

С уважением!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top