许多被人描述为“脚本语言”的语言令人感兴趣,具有极大的可能来构建Web服务客户端应用程序。术语“脚本语言”被广泛的用于一些语言,这些语言是从现有构件建立的”quick and dirty”解决方案,而不是一个完整的系统编程语言。这些语言通常具有很多新的语句,并且具有细节的自动管理功能,例如内存管理。 基于TIOBE语言流行性的调查,现在最为流行的 “脚本”语言是PHP,Perl,Python, JavaScript 和 Ruby。
Perl是早期的Internet的重负荷载体,但其流行性正在减退。PHP作为一个创建网页的工具还在不断的变得更加流行,但是我决定要看一看R……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
许多被人描述为“脚本语言”的语言令人感兴趣,具有极大的可能来构建Web服务客户端应用程序。术语“脚本语言”被广泛的用于一些语言,这些语言是从现有构件建立的"quick and dirty"解决方案,而不是一个完整的系统编程语言。这些语言通常具有很多新的语句,并且具有细节的自动管理功能,例如内存管理。
基于TIOBE语言流行性的调查,现在最为流行的 “脚本”语言是PHP,Perl,Python, JavaScript 和 Ruby。Perl是早期的Internet的重负荷载体,但其流行性正在减退。PHP作为一个创建网页的工具还在不断的变得更加流行,但是我决定要看一看Ruby。整个工业界轰动于用Ruby开发的基于面向数据库的开源项目“Rails” Web架构,我对此留有深刻的印象。
Ruby编程语言大概是在1995形成的,它差不多和Java是在同一个时代。尽管如此,由于其创建是基于单独的创建者Yukihiro Matsumoto的预想,而不是一个联合的开发团队的合作的结果,所以它的发展始终是更加缓慢的,并且也没有取得那么广泛的使用。在过去的几年中,一个关于在开源项目的兴趣的调查发现,整个社区已推动了许多的Ruby开发。现在Ruby的版本是1.8.4,即将到来的最新版本是1.9。
Ruby是一个具有动态类型的解释型面向对象语言。Ruby的一个典型的运行环境包括一个快速测试的交互接口。现在的标准库包括处理XML文档的扩展类和访问用XML-RPC和SOAP 类型的Web services的具体类。
一个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)
第1行使“xmlrpc/client”代码从标准库中装载出来。第2行创建了一个使用一个Url和默认标准的客户端类的实例。在第3行,你也许能够从以前的文章中回忆起来,XML-RPC协议使用一个简单的数据类型集合,并且不要求命名空间。其中的一个数据类型是timestamp,它在Ruby XML-RPC中成为一个DateTime类的实列,而DateTime类将会由第3行的服务调用返回。第4行使用大家熟悉的"printf"语法来显示DateTime对象的独立成员的值。
一个Ruby的SOAP例子
许多版本的Ruby构建的SOAP工具已经由动态开源Ruby社区开发出来了。在我的XML-RPC的成功的鼓励下,我决定试一试可以直接依靠WSDL工作的标准库工具。然而它却比我预想的要难,因为它的文档和示例并没有和开发相关的,例如,Sun的Web Services Developer的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
第1行从标准库载入"soap/wsdlDriver"代码。第2行代码创建一个包含访问描述股票引用服务的WSDL文件的Url变量。注意在Ruby中,被命名为“wsdl_url”的变量并不包含一个相关的类的类型,它可以引用任何的对象类型。
第3行进行了许多幕后的工作,最后创建了一个定制化的类的实例,该定制化类是由WSDL描述的Web service。最后的对象被创建出来,并具有了一系列的方法,这些方法的名字都是从 WSDL包含的变量得到的,例如在第4行取得设置的"wiredump_file_base"。如果变量是一个集合,SOAP请求和响应的全文都将会在本地文件中记录下来,这在处理复杂的Web服务中是一个很大的帮助。
第5行创建了一个“hash”——一个和具有股票标识的命名符号相关的数组——在例子中,"WAG"代码表示Walgreens。这个hash是把股票代码映射为SOAP 请求元素。下面的就是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>
第6行调用了getQuote方法,getQuote方法是在一个由Ruby从WSDL中动态创建的定制类中的。这个方法完成了所有的格式化SOAP请求,联系Web service和解析SOAP响应的工作。它所返回的“结果”是一个一般的“映射”对象,包含了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>
我们实际需要的内容是在GetQuoteResult元素中的StockQuote 元素所包含的PrevClose元素内的。第7行输出了这个内容,并把它标记为"getQuoteResult.stockQuote.prevClose",而不是使用元素的名字的以大写字母开始的形式,如 “StockQuote”。我并不确定为什么Ruby库要这样设计,但是发现这个敲门还真浪费了不少时间。
正如你在例子中看到的,一个Ruby中的Web service客户端可以通过使用标准库以很少的几行代码来创建。和一个具有更长的历史和更多支持者的语言来对比,你可能需要做更多的试验,所以具有脚本语言的快速测试能力将会是一个很大的帮助。
相关推荐
-
SAP收购CallidusCloud 与Salesforce竞争
一直被称为后台办公巨头的SAP现在似乎也想在前台办公大展拳脚。 最新的迹象是SAP收购CallidusClou […]
-
PHP终于迎来了自己的正式语言规范
尽管PHP脚本语言早在1995年左右就已经诞生并在Web开发领域占据着重要地位,但其一直没有自己的正式语言规范——只提供广泛的用户说明文档。
-
如何使用JavaScript框架为企业谋求发展
JS真的已经从一个脚本语言演变成为一种成熟的程序语言了吗?表面上看这是真的。而实际上,JavaScript如今正融入到属于自己的Web和移动应用程序中。
-
API设计如龙生九子 各不相同
IT咨询管理公司CA Technologies对API产业做了个问卷调查,问卷内容涉及API设计风格以及管理部署的新动向。调查结果表明,JSON与XML可谓两分天下。