作为Web服务客户端语言的Ruby

日期: 2008-12-10 作者:William Brogden翻译:杨君 来源:TechTarget中国 英文

很多语言被描述为“脚本语言”,这些语言可以被用来编写Web服务用户应用。“脚本语言”这个术语经常应用在像“quick and dirty”的解决方案上,这些解决方案是建立在现有的组件上,而不是建立在完整的系统编程语言上。在某些语句中,这些语言的贡献不小,并且可以对内存分配这样的具体细节进行自动管理。   基于对TIOBE语言受欢迎度的调查,目前最受欢迎的“脚本”语言是PHP、Perl、Python和JavaScript和Ruby。

Perl虽然是早期互联网的主力,但是现在的支持率不断下滑。作为创建网页的主要工具,PHP受欢迎程度不断增加,但是我想先看一看Ruby语言。我一直认为业内人士对数据定向……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

很多语言被描述为“脚本语言”,这些语言可以被用来编写Web服务用户应用。“脚本语言”这个术语经常应用在像“quick and dirty”的解决方案上,这些解决方案是建立在现有的组件上,而不是建立在完整的系统编程语言上。在某些语句中,这些语言的贡献不小,并且可以对内存分配这样的具体细节进行自动管理。

  基于对TIOBE语言受欢迎度的调查,目前最受欢迎的“脚本”语言是PHP、Perl、Python和JavaScript和Ruby。Perl虽然是早期互联网的主力,但是现在的支持率不断下滑。作为创建网页的主要工具,PHP受欢迎程度不断增加,但是我想先看一看Ruby语言。我一直认为业内人士对数据定向开放源很感兴趣,即编写在Ruby上的“Rails”。

  Ruby程序设计语言最早在1995年出现,所以它和Java有着同样的历史。但是对于其单个创建者Yukihiro Matsumoto来说,而不是整个开发小组,Ruby的开发非常缓慢,而且一直没有引起公众的关注。近几年人们对开放源团体的关注,促进了人们对于Ruby的开发。这个语言目前是1.8.4版本,1.9版本即将面市。

  Ruby是一种带有动态类型的目标定向语言。其典型的工作环境包括一个用于监测的交互接口。目前标准的程序库包括用于处理XML文档的扩展类以及用于访问XML-RPC和SOAP格式Web服务的特殊类。

  一个XML-RPC格式的Ruby实例

  下面是所有访问XML-RPC格式Web服务所需的Ruby编码,为了便于讨论,我们把这些编码都标上了数字。

  1. require 'xmlrpc/client'

  2. server = XMLRPC::Client.new2("http://time.xmlrpc.com/RPC2")

  3. result = server.call("currentTime.getCurrentTime")

  4. printf("xmlrpc time %i:%i:%i ", result.hour, result.min, result.sec)

  第一行导致从标准库路径下载了一个“xmlrpc/client”。第二行创建了一个使用url和标准还原默认值的用户类。在第三行中,你可能还记得我们在前面的文章中提到过,XML-RPC协议使用了一个简单的数据类型序列,并且不需要命名空间。其中的一种数据类型就是时间信息,在Ruby XML-RPC中,就成了DateTime类的一个实例,从服务呼叫在第三行被返回。第四行使用了一个我们熟悉的“printf”句法,将单个DateTime对象的值打印下来。

  一个Ruby SOAP实例

  Ruby SOAP工具的许多版本都是由动态开放源Ruby团体所创建的,介于我在XML-RPC方面所取得的成就,我决定尝试一下在WSDL中可以直接使用的标准库工具。它比我想象中的更为厚重,因为它的文档和样本没有像Sun公司Web服务开发商给Java补丁开发的那样细致。要想引用一个库存,必须要有一个全套的程序,下面我们将详细讨论。

  1. require 'soap/wsdlDriver'

  2. wsdl_url = "http://ws.invesbot.com/stockquotes.asmx?WSDL"

  3. soap = SOAP::WSDLDriverFactory.new( wsdl_url ).create_rpc_driver

  4. soap.wiredump_file_base = "soapresult"

  5. param = {"symbol" => "WAG" }

  6. result = soap.getQuote( param )

  7. puts result.getQuoteResult.stockQuote.prevClose

  第一行从标准库下载了一个“soap/wsdlDriver”编码。第二行创建了一个包含URL的变量。这个URL用来访问WSDL文件,该文件描述了一个库存访问服务。要注意的是即使是用Ruby语言,像“wsdl_url”这样的变量并没有一个相关的类类型,它可以指任何的对象类型。

  第三行执行了大量的幕后工作,并且创建了一个专为Web服务设计的类,这个Web服务是用WSDL所描述,由此得出的对象是用一些方法创建的方法得出的,这些方法因WSDL中的条目以及“wiredump_file_base”这样的变量而得名的,“wiredump_file_base”这个变量是在第四行得以安装。如果已经安置了这个变量,我们就会将SOAP要求的全部文本以及响应写入本地文件,这些本地文件用于帮助我们解决复杂的Web服务。

  第五行创建了一个“hash”——这个数组将“symbol”和库存符号联系在了一起——在这种情况下就是为Walgreens所编写的“WAG”编码,这一部分的WSDL描述了GetQuote方法呼叫:

  <s:element name="GetQuote">
       <s:complexType>
         <s:sequence>
          <s:element minOccurs="0" maxOccurs="1" name="symbol" type="s:string" />
         </s:sequence>
       </s:complexType>
    </s:element>

  第六行呼叫了getQuote方法,这是一个常规类中的方法,是由Ruby在WSDL中创建的,这个方法会将所有的SOAP格式化,联系Web服务并分析SOAP数据。它返回的结果是一个类属“Mapping”对象,包含了SOAP响应的数据。要想从响应中获取有用的数据,必须要弄明白准确的句法,这需要很多细致的工作。如果你仔细研读SOAP响应的整个文本,你就会知道,这个服务返回了许多用WSDL描述的数据。

  <s:element minOccurs="0" maxOccurs="1" name="GetQuoteResult">
      <s:complexType mixed="true">
         <s:sequence>
           <s:any />
         </s:sequence>
       </s:complexType>
    </s:element>

  实际上我们需要的是一个“StockQuote”中包含的在“PrevClose”要素,第七行的输出这个内容,并且以“getQuoteResult.stockQuote.prevClose”对其进行访问,我不知道Ruby库为什么要这样做,要弄清楚这一点要花很长时间。

  正如你在上述例子所见,通过标准库,我们用几个语句就可以创建一个Ruby Web服务客户。和那些有较长历史的标准语言和共同支持的来说,你可以做更多的尝试,所以快速检测再加上脚本语言将会对你有很大帮助。

相关推荐

  • SAP收购CallidusCloud 与Salesforce竞争

    一直被称为后台办公巨头的SAP现在似乎也想在前台办公大展拳脚。 最新的迹象是SAP收购CallidusClou […]

  • API设计如龙生九子 各不相同

    IT咨询管理公司CA Technologies对API产业做了个问卷调查,问卷内容涉及API设计风格以及管理部署的新动向。调查结果表明,JSON与XML可谓两分天下。

  • 2014年web开发者应该学习的技术盘点

    web开发行业发展迅速,每天总有新的技术、框架、语言或技术方法诞生,对大部分人来说都喜欢学习“所有东西”,但这不符合实际!所以,在2014年,作为Web开发者应该学习什么呢?

  • API设计:如何正确开发应用程序接口

    在交互组件化软件的世界里,没有比让组件之间以及组件与移动设备和浏览器之间进行连接的应用程序接口(API)更重要的东西了。