Rails - 使用另一个应用程序的 SOAP 接口

2024-01-07

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

我现在需要它开始与另一个应用程序通信(sympa http://www.sympa.org/)。该应用程序公开了一个SOAP接口 http://www.sympa.org/manual/soap,所以我尝试使用它是有道理的(命令行界面不完整)。

我应该遵循哪些步骤?

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

有人有工作教程/示例吗?

我或多或少熟悉一般的 SOAP 概念,但我以前从未使用过 SOAP。我理解休息。


编辑:这是一个过时的答案,约会 Rails 2.x。如需更现成的答案,建议您观看轨道广播 #290 http://railscasts.com/episodes/290-soap-with-savon。我将这个答案留在这里,以防有人由于某种原因仍在使用 Rails 2.x,并且无法应用 Ryan Bates 所说的内容。

我已经为此奋斗了几天,我想我自己找到了解决方案。

我能找到的用于 SOAP 交互的最简单、最活跃的 gem 称为Savon http://github.com/rubiii/savon.

它应该可以与 Ruby 本身一起使用。以下是关于如何将它与 Rails 一起使用的快速浏览:

安装宝石。最简单的方法是编辑配置/环境并添加

config.gem "savon"

然后运行

rake gems:install

这应该会安装 savon 以及更多的 gem。

接下来,在您的上创建一个类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

您将主要使用它来调用方法。您能够调用的方法类型取决于“其他站点”提供的服务。让我们假设有 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 and hair_color。在 ruby​​ 控制台上,您可以像这样调用它:

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

您将得到一个哈希值作为响应。在这种情况下,我得到了“正常”状态,但情况可能要复杂得多。

稍后,您可以创建(例如)无桌模型 http://railscasts.com/episodes/193-tableless-model called Monkey,并定义方法,例如new, create等使用网络服务的。

我遗漏了很多有趣的事情,比如安全性。但如果您遇到与我相同的问题,这应该可以帮助您入门。

Regards!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails - 使用另一个应用程序的 SOAP 接口 的相关文章

随机推荐

  • MySQL Select 和 IF() 语句

    我对 MySQL 有点陌生 我需要帮助 我有一张桌子Invoices和一张桌子Payments 我无法生成显示所有已支付发票的报告In Full or a Partial Payment已于 2019 年 12 月 31 日收到 一张发票可
  • OpenCL 内核未矢量化

    我正在尝试构建一个内核来进行并行字符串搜索 为此 我倾向于使用有限状态机 fsm 的转换表位于内核参数状态中 代码 kernel void Find constant char text const int offset const int
  • java:关闭子进程std流?

    来自 javadocjava lang Process http download oracle com javase 1 5 0 docs api java lang Process html 创建进程的方法可能不适用于某些本机平台上的特
  • scapy中sniff函数的过滤器无法正常工作

    看来filter of sniff功能无法正常工作 我正在使用以下过滤器执行嗅探 a sniff count 1 filter tcp and host 192 168 10 55 and port 14010 但有时sniff抓住一个UD
  • 在 Heroku 上部署时找不到模块错误

    我正在尝试将 Github 上的应用程序部署到 Heroku 但出现错误 src Index tsx 中出现错误 找不到模块 错误 无法解析 app src 中的 ConfigureStore src Index tsx 9 23 50 当
  • 预计响应会成功,但结果是 302

    我有以下文章控制器 def myarticles myarticles current student articles all respond to do format format html format xml render xml
  • 从 Javascript 调用 SAML IdP

    我再次需要社区的明智建议 我必须在我的 SSO 系统中集成多个 Web 应用程序 IdP 是 Active Directory 联合服务 ADFS2 SP 是 Weblogic 托管服务器 我在 Web SSO 配置文件中对 SP 启动的用
  • Bootstrap 轮播图像未正确对齐

    请看下面的图片 我们正在使用 bootstrap carousel 来旋转图像 但是 当窗口宽度较大时 图像与边框无法正确对齐 但是 无论窗口的宽度如何 bootstrap 提供的轮播示例始终可以正常工作 遵循代码 有人可以解释为什么轮播的
  • 如何在Java中将UTC时间戳转换为本地日、小时、分钟?

    给定时间戳 1245613885 这是 GMT 中的时间戳 如何使用服务器的本地时区信息将其转换为 Java 中的年 日 小时 分钟值 您可以使用java util Calendar http download oracle com jav
  • Prolog 中的 Lambda 表达式?

    我通常能够通过 maplist 找出 Lambda 的一些用法 但通常很难在 prolog 中使用 lambda 可能是因为它与其他语言不同 因为统一 这里是症结之一 如何应用声明的 Lambda 表达式 FE LAM X R 奇怪 和 之
  • 为什么Hashmap的输出是任意的,而不是按照特定的顺序?为什么它的排序顺序在插入和删除新节点时发生变化?

    请解释为什么哈希图会给出不可预测的输出 它根据什么对元素进行排序 为什么当我们插入 删除新元素时它的输出会改变 导入java util HashMap 导入 java util Iterator 导入java util Set public
  • Chrome开发者工具打开时出现双重请求

    我有一个奇怪的问题 我有一个非常简单的 Node expressjs 应用程序 我有一个更复杂的应用程序 但这个简单的示例显示了问题 该应用程序有三个路线 如下所示 var i 0 app route login get function
  • 如何在java中创建一个没有扩展名的文件

    java中是否可以创建一个没有扩展名的文件 你可以试试 File f f new File myfile if f exists f createNewFile
  • 添加android支持设计库后Gradle错误

    添加后我收到此错误compile com android support design 22 2 0 到我的 gradle 文件 app build intermediates exploded aar com android suppor
  • 无法从“假期”导入名称“复活节”

    我正在尝试导入fbprophet然而 在 Python Anaconda 上 我收到此错误 ImportError cannot import name easter from holidays 谁能建议可能出了什么问题 Code from
  • 在 AWS 中设置 JMeter 进行分布式测试,但存在连接问题

    我必须使用 JMeter 进行分布式测试 目标是让 AWS 中由一台本地服务器控制的多台远程服务器向 AWS 中的另一台服务器发送文件下载请求 如何在AWS中设置不同的服务器 我如何远程连接到他们 有人可以提供一些有关如何操作的分步说明吗
  • ASP.NET MVC - 如何首先使用实体​​框架模型/数据库部署到 Azure?

    因此 我首先使用实体 框架数据库构建了我的应用程序 我的数据库只有2个表 非常小 我在 YT 上看过一些有关部署到 Azure 的视频 但看起来它们都使用 CodeFirst 方法 然后在包管理器上使用启用迁移 然后使用复选框发布应用程序来
  • 奇怪的定位元素

    我有一些非常奇怪的东西 我正在构建一个简单的视差滚动旋转信息框 我在中心做了一个正方形 里面的元素在定位方面表现得非常奇怪 但是当我调整窗口大小时 所有内容都会弹出到正确的位置 我完全不知道为什么或如何发生这种情况 有人有主意吗 问候 克里
  • Xpath 问题,如果您知道元素的标题,则获取元素的 id(属性)

    这是我的XML文件 我想知道如何获取文章的ID 标题是什么 使用 Xpath 可以吗 XML 文件
  • Rails - 使用另一个应用程序的 SOAP 接口

    我有一个纯粹的 工作的 Rails 应用程序 我现在需要它开始与另一个应用程序通信 sympa http www sympa org 该应用程序公开了一个SOAP接口 http www sympa org manual soap 所以我尝试