ruby-on-rails – Rails – 使用另一个应用程序的SOAP接口
我有一个纯粹的,有效的Rails应用程序.
我现在需要它开始与另一个应用程序通信(sympa).这个应用程序公开了一个SOAP interface,所以我尝试使用它是有道理的(命令行界面不完整). 我应该遵循哪些步骤? 我应该使用什么宝石/插件? 有没有人有工作教程/例子? 我或多或少熟悉一般的SOAP概念,但我以前从未使用过SOAP.我理解REST. 解决方法
编辑:这是rails 2.x的过时回答约会.对于更现有的答案,我建议你观看
railscast #290.我在这里留下这个答案,以防有人因为某些原因仍在使用rails 2.x,并且无法应用Ryan Bates在那里所说的内容.
我已经和它斗争了好几天了,我想我自己找到了解决方案. 我能为SOAP交互找到的最简单,最活跃的gem叫做Savon. 它应该与Ruby本身一起使用.以下是关于如何在Rails中使用它的快速浏览: 安装宝石.最简单的方法是编辑配置/环境并添加 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的tableless model,并定义使用Web服务的new,create等方法. 我遗漏了很多有趣的东西,比如安全性.但如果你遇到同样的问题,这应该可以让你开始. 问候! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |