Rails的 - 使用其他应用程序的SOAP接口
-
23-09-2019 - |
解决方案
编辑:这是一个过时的答案约会轨2.x的对于更存在的答案,我建议你看 railscast#290 。我在这里离开这个答案,以防有人仍在使用Rails 2.X出于某种原因,并不能适用瑞恩·贝茨说,有。
我一直是这样,现在的战斗了一些日子,我想我找到了解决办法喽。
最简单,最活跃的宝石,我能找到的SOAP交互称为萨翁。
这应该使用Ruby自身的工作。这里是你如何使用Rails使用它快速浏览:
安装的宝石。最简单的方法是,以编辑配置/环境和ADD
config.gem "savon"
和然后运行
rake gems:install
这应该与一对夫妇更多宝石沿安装萨翁。
接下来,您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
您将主要用它来调用方法。那种方法,你就可以调用依赖于“其他网站”所提供的服务。让我们想象一下,三个动作可供选择 - :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'}
您会得到一个哈希作为响应。在这种情况下,我得到了一个“OK”的地位,但它可能会复杂得多。
随后,可以创建(例如)一个无表模型的称为Monkey
,并定义像new
,create
等使用该web服务的方法。
我要离开了很多有趣的事情,比如安全性。但是,这应该让你开始,如果你有同样的问题,我有。
问候!
不隶属于 StackOverflow