我有一个纯的,工作,Rails应用程序。

我现在需要它来启动与另一个应用通信( SYMPA )。此应用程序公开,它公开 SOAP接口,因此它是有道理的,我尝试使用它(命令行界面是不完整的)。

我应该遵循哪些步骤?

宝石/插件,我应该使用什么样的?

有没有人有工作教程/例子吗?

我或多或少熟悉的一般概念,SOAP,但我从来没有使用SOAP。我明白REST。

有帮助吗?

解决方案

编辑:这是一个过时的答案约会轨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>

因此,它有两个参数:namehair_color。在Ruby控制台,您可以调用它是这样的:

MyWebService.invoke :create_monkey, {:name => 'frank', :hair_color => 'red' }
=> {:status => 'ok'}

您会得到一个哈希作为响应。在这种情况下,我得到了一个“OK”的地位,但它可能会复杂得多。

随后,可以创建(例如)一个无表模型的称为Monkey ,并定义像newcreate等使用该web服务的方法。

我要离开了很多有趣的事情,比如安全性。但是,这应该让你开始,如果你有同样的问题,我有。

问候!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top