我有一个纯粹的,有效的Rails应用程序。
我现在需要它开始与另一个应用程序(sympa)通信。此应用程序公开了SOAP interface,因此我尝试使用它是有意义的(命令行界面不完整)。
我应该遵循哪些步骤?
我应该使用哪些宝石/插件?
有没有人有工作教程/示例?
我或多或少熟悉一般的SOAP概念,但我以前从未使用过SOAP。我理解REST。
答案 0 :(得分:11)
编辑:这是rails 2.x的过时回答约会。对于更现有的答案,我建议您观看railscast #290。我在这里留下这个答案,以防有人因为某些原因仍在使用rails 2.x,并且无法应用Ryan Bates在那里所说的内容。
我已经和它斗争了好几天了,我想我自己找到了一个解决方案。
我可以为SOAP交互找到的最简单,最活跃的gem称为Savon。
它应该与Ruby本身一起使用。以下是关于如何在Rails中使用它的快速浏览:
安装gem。最简单的方法是编辑配置/环境并添加
config.gem "savon"
然后运行
rake gems:install
这应该安装savon以及更多宝石。
接下来,在app/models/
目录上创建一个类(它不必是ActiveRecord的子类,只是models目录中的常规类)
如果您像我一样,您将希望尽可能远离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'}
您将获得哈希作为回复。在这种情况下,我得到了一个'ok'状态,但它可能要复杂得多。
稍后,您可以创建(例如)名为Monkey
的{{3}},并定义使用网络服务的new
,create
等方法。
我遗漏了许多有趣的东西,比如安全性。但如果你遇到同样的问题,这应该可以让你开始。
问候!