Внедрение сервера SOAP 1.2 с Rails 3
SOAP? Зачем вам это использовать?
Я использую Ruby Enterprise Edition и Rails 3 для написания своего веб-приложения. Приложение использует службы радиовещания белого лейбла Ustream Watershed для обеспечения прямой трансляции для моих пользователей. К сожалению, я врезался во время разработки. Watershed позволяет приложению предоставлять свой собственный уровень аутентификации через реализацию SOAP-сервиса на стороне приложения. Этот уровень аутентификации должен быть реализован в SOAP 1.2 для работы с Watershed. К моему большому разочарованию, похоже, что сообщество Ruby перешло в прошлое ye'old SOAP к более светлому будущему, заполненному REST и Unicorns.
Это делает меня счастливым 99,9% времени. Однако сейчас мне нужно сделать конечную точку SOAP 1.2 в моем блестящем новом приложении Rails 3.
Если у кого-то есть предложения или библиотеки, которые я могу использовать, я был бы очень благодарен.
Вещи, которые я уже сделал
- Пробовал встроенную поддержку SOAP в Ruby. К сожалению, похоже, что он не поддерживает SOAP 1.2.
- Посмотрел на WSO2, но не хотел создавать обширный набор Ruby-расширений на моем сервере, чтобы поддерживать SOAP.
- Мысль о жестком кодировании ответов xml, прежде чем решить, что я ленивый программист.
Ответы
Ответ 1
Прошло некоторое время с тех пор, как этот Q был опубликован, но эй, SOAP также не ускользает. Наверное, вы что-то внедрили, поделитесь ими?
В любом случае, как своего рода ответ, я был благословлен тем, что клиент заставлял меня потреблять его SOAP-сервисы (их потрясающая платформа SOA не поддерживает другие форматы...) как для вытягивания, так и для подталкивания данных. Я только потребляю, поскольку я предоставляю хорошие и чистые веб-службы RESTful для других. Я использую савон (французский для мыла?) С большим успехом
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, савон поддерживает его. Фактически я являюсь поставщиком услуг SOAP, я не делал этого в рельсах (сражайтесь!) И может только пожелать вам удачи. Необходимость разработки глупых WSDL - это настоящая боль при использовании SOAP-сервисов. Надеюсь, это поможет кому-то.
Ответ 2
Если вы не можете избежать SOAP в Rails 3, попробуйте стирать wash_out. Вы можете найти его по адресу: https://github.com/roundlake/wash_out
Мы использовали в нашей системе. Это не безупречно и все еще претерпевает некоторые изменения, по крайней мере, вы начнете
Хотя Rails 3 и далее, они перестали поддерживать SOAP - стирание wash_out поможет вам начать работу с веб-сервисом SOAP быстрее. Любой, кто заинтересован, должен посмотреть на wiki wiki на github. В нашем случае клиент хотел, чтобы веб-сервис SOAP был открыт; мы попытались пройти путь REST. В конце концов, мы должны были сказать "да" SOAP. Я попробовал aws, soap4r - но wash_out оказался наилучшим образом.
Ответ 3
Вы можете использовать этот камень для реализации мыла
savon
Ответ 4
Вы можете найти то, что ищете здесь http://aws.rubyonrails.org/