Реализация сервера SOAP 1.2 с Rails 3 - PullRequest
12 голосов
/ 15 апреля 2010

SOAP? Зачем ты это используешь?

Я использую Ruby Enterprise Edition и Rails 3 для написания своего веб-приложения. Приложение использует услуги вещания White Label от Ustream, чтобы обеспечить прямую трансляцию для моих пользователей. К сожалению, я столкнулся с трудностями во время разработки. Watershed позволяет приложению предоставлять собственный уровень аутентификации посредством реализации службы SOAP на стороне приложения. Этот уровень аутентификации должен быть реализован в SOAP 1.2 для работы с Watershed. К моему великому разочарованию, кажется, что сообщество Ruby продвинулось мимо старого SOAP к светлому будущему, наполненному REST и Unicorns.

Это делает меня счастливым в 99,9% случаев. Однако сейчас мне нужно создать конечную точку SOAP 1.2 в моем новом блестящем приложении Rails 3.

Если у кого-нибудь есть какие-либо предложения или библиотеки, которые я могу использовать, я был бы очень благодарен.

Вещи, которые я уже сделал

  • Попробовал встроенную поддержку SOAP в Ruby. К сожалению, похоже, что он не поддерживает SOAP 1.2.
  • Посмотрел WSO2, но не хотел создавать обширный набор расширений Ruby на моем сервере только для поддержки SOAP.
  • Подумал о жестком кодировании XML-ответов, прежде чем решить, что я ленивый программист.

Ответы [ 4 ]

4 голосов
/ 03 ноября 2010

Прошло много времени с тех пор, как этот Q был опубликован, но эй, SOAP тоже не ускоряется. Я думаю, вы что-то реализовали, хотите поделиться?

В любом случае, как своего рода ответ, я был благословлен тем, что клиент заставил меня использовать его SOAP-сервисы (их потрясающая SOA-платформа не поддерживает другие форматы ...) как для извлечения, так и для передачи данных. Я только потребляю, поскольку сам предоставляю хорошие и чистые веб-службы RESTful для других. Я пользуюсь savon (французский для мыла?) С большим успехом

http://savonrb.com

Если вы действительно ленивы, вы жестко закодируете структуру конверта SOAP и введете свои динамические данные. Вот простой пример.

def soap_envelope(pCode)
  "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:prod='http://xmlns.aBigCompany.com/path/to/NeededService'>
     <soapenv:Header/>
     <soapenv:Body>
        <something:NeededServiceRequest>
           <something:productCode>#{pCode}</something:productCode>
        </something:NeededServiceRequest>
     </soapenv:Body>
  </soapenv:Envelope>"
end

И это один из способов его использования

products_wsdl = Savon::Client.new "http://ipAtBigCo:xxxx/path/to/services/NeededService?wsdl"
begin
  response = products_wsdl.process! do |soap| 
    soap.xml = soap_envelope("someProductCode")
  end
rescue => e
  MyLogger.error "Error: SOAP call for code #{pCode} failed. ++"
  raise e
end
response.to_hash # This is the nice part 

О SOAP 1.2, savon поддерживает его. О том, что я на самом деле являюсь SOAP-сервисом , провайдером , я не делал этого в рельсах (борись!) И могу только пожелать тебе удачи. Необходимость разработки глупых WSDL - это настоящая проблема с сервисами SOAP. Надеюсь, это кому-нибудь поможет.

3 голосов
/ 29 мая 2012

Если вы не можете избежать SOAP в Rails 3, тогда попробуйте gem wash_out. Вы можете найти его по адресу: https://github.com/roundlake/wash_out

Мы использовали в нашей системе. Он не защищен от ошибок и все еще претерпевает некоторые изменения, по крайней мере, вы бы начали

Несмотря на то, что в Rails 3 и далее они перестали поддерживать SOAP - гем wash_out поможет вам быстрее приступить к созданию веб-службы SOAP. Всем, кто заинтересован, стоит взглянуть на wiki wash_out на github. В нашем случае клиент хотел, чтобы был представлен веб-сервис SOAP; мы пытались идти по пути отдыха. В конце концов, мы должны были сказать «да» SOAP. Я пробовал aws, soap4r - но мытье оказалось наилучшим образом.

1 голос
/ 07 июня 2016

Вы можете использовать этот драгоценный камень для реализации мыла

Савон

0 голосов
/ 16 апреля 2010

Здесь вы можете найти то, что ищете http://aws.rubyonrails.org/

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