服务计算(一)
文章目录
第零章、XML
可扩展标记语言,标准通用标记语言的子集,简称XML。是一种用于标记电子文件使其具有结构性的标记语言。
在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。是Internet环境中跨平台的、依赖于内容的技术,也是当今处理分布式结构信息的有效工具。早在1998年,W3C就发布了XML1.0规范,使用它来简化Internet的文档信息传输。
第一章、介绍
1.0 为什么要学服务计算
今天,万维网的主要用途是交互访问文档和应用程序。在几乎所有情况下,这种访问都是由人类用户进行的,通常是通过Web浏览器、音频播放器或其他交互式前端系统进行的。如果将Web扩展到支持应用程序之间(从一个程序到另一个程序)的通信,那么它的威力和范围将显著增长。
-来自W3CXML协议工作组章程
欢迎来到web服务的世界。本章将介绍web服务术语和体系结构的基础知识。它通过回答最常见的问题来做到这一点,包括:
•什么是web服务?•什么是web服务协议栈?•什么是XML消息传递?服务描述?服务发现?•XML-RPC、SOAP、WSDL和UDDI是什么?这些技术如何相互补充,共同工作?•web服务特有的安全问题是什么?•目前有哪些标准?
1.1 Web服务简介
web服务是通过Internet提供的任何服务,使用标准化的XML消息传递系统,并且不与任何一种操作系统或编程语言绑定。
下图是一个基本的web服务
XML消息传递有几种替代方案。例如,可以使用XML远程过程调用(XML-RPC)或SOAP,这两种调用都将在本章后面介绍。或者,您可以只使用HTTP GET/POST并传递任意XML文档。
尽管它们不是必需的,但是web服务还可以有两个额外的(和期望的)属性:
•web服务应该是自描述的。如果发布新的web服务,则还应向该服务发布公共接口。至少,您的服务应该包含人类可读的文档,以便其他开发人员可以更轻松地集成您的服务。如果您已经创建了一个SOAP服务,那么理想情况下还应该包括一个用通用XML语法编写的公共接口。XML语法可用于标识所有公共方法、方法参数和返回值。
•web服务应该是可发现的。如果您创建一个web服务,应该有一个相对简单的机制来发布这个事实。同样,应该有一些简单的机制,让相关方可以找到服务并定位其公共接口。确切的机制可以是通过一个完全分散的系统或一个更加逻辑集中的登记系统。
总而言之,一个完整的web服务就是:
•可在Internet或专用(intranet)网络上使用•使用标准化的XML消息传递系统•不与任何一种操作系统或编程语言绑定•可通过通用XML语法进行自我描述•可通过简单的查找机制发现
1.1.1 今天的网络:以人为中心的网络
要使web服务更加具体,请考虑基本的电子商务功能。例如,Widgets,Inc.通过其网站销售部件,使客户能够提交采购订单并检查订单状态。
为了检查订单状态,客户通过web浏览器登录到公司网站,并以HTML页面的形式接收结果。这个基本模型说明了一个以人为中心的Web,其中人类是发起大多数Web请求的主要参与者。它也代表了当今大多数网络运行的主要模式。
1.1.2 Web服务:以应用程序为中心的Web
使用web服务,我们从以人为中心的web转变为以应用程序为中心的web。这并不意味着人类完全不在画面之外!它只是意味着可以在应用程序之间直接进行对话,就像在web浏览器和服务器之间一样容易。
例如,我们可以将order status应用程序转换为web服务。然后,应用程序和代理可以连接到服务并直接利用其功能。例如,库存应用程序可以查询Widgets,Inc.所有订单的状态。然后,库存系统可以对数据进行处理、操作,并将其集成到整个供应链管理软件中。在许多领域中,以应用程序为中心的Web可以证明是非常有用的。例如信用卡验证、包裹跟踪、投资组合跟踪、购物机器人、货币转换和语言翻译。其他选项包括个人信息的集中存储库,如微软提议的.NET MyServices项目。NET MyServices旨在集中日历、电子邮件和信用卡信息,并提供用于共享这些数据的web服务。
Web服务与语义Web
蒂姆•伯纳斯•李是Web的最初发明者,他最近提出了“语义Web”的观点,语义Web是以应用程序为中心的,与Web服务有许多相同的想法。事实上,在W3C的第一次web服务会议上,Berners Lee指出web服务是语义web远景的实现。有关语义Web的概述,请参阅Berners Lee在Scientific American中的文章:http://www.sciam.com/2001/0501issue/0501berners-Lee.html。
1.1.3 Web服务愿景:自动化Web
以应用程序为中心的Web并不是一个新概念。多年来,开发人员已经创建了CGI程序和javaservlet,它们主要是为其他应用程序设计的。例如,公司开发了信用卡服务、搜索系统和新闻检索系统。
关键的区别在于,这些系统中的大多数都是由特定的解决方案组成的。有了web服务,我们有望实现一些标准化,这将有望降低应用程序集成的障碍。
web服务体系结构提供了一个有趣的替代方案,可以将表示与内容彻底分离。例如,一个站点只能由容器页面组成,容器页面通过SOAP或XML-RPC将参数传递给真正的逻辑。这使得更改演示文稿变得很容易,而且还允许人和计算机“共享”单个web服务。
从长远来看,web服务也提供了自动化web的前景。如果服务很容易被发现、自我描述并遵循通用标准,那么就有可能实现应用程序集成的自动化。一些业内人士称之为“just intime”应用程序集成。
例如,以MegaElectric(ME)为例。我想从Widgets,Inc.购买零件,还想无缝地将订单状态集成到一个统一的库存系统中。在未来的某个时候,我将能够购买自动化整个过程的软件。下面是它的工作原理:
一、库存应用程序唤醒并连接到web服务的集中目录:“Widgets,Inc.是否提供订单状态服务?”目录返回Widgets,Inc.服务的信息,并包含指向服务描述的指针。二、inventory应用程序连接到Widgets,Inc.并检索服务描述。
三、服务描述文件包含有关如何连接到指定服务的完整详细信息。因此,inventory应用程序可以自动调用order status服务。
是否可以使用现有的web服务技术自动化此过程?不完全正确:目前只有部分流程可以自动化。例如,我们将在第9章中看到,可以创建查询服务注册中心的Java程序。然而,了解结果并选择实际使用的服务仍然需要一些人工干预。也可以根据服务描述自动调用服务。例如,正如我们将在第6章中看到的,许多自动调用工具已经存在并且工作得非常好。
即使所有这些步骤都可以自动化,但目前还没有实现业务关系自动化的机制。例如,当前的服务描述不包括对定价、交付时间表的保证,或者如果没有交付,则不包括法律后果。给定一个服务描述,您也不能假定该服务没有bug,或者该服务在100%的时间内都是可用的。
这些类型的问题不容易解决,也不容易自动化。因此,完全自动化的web服务和“即时”应用程序集成可能永远无法实现。尽管如此,当前的web服务技术确实使我们更进一步,并使我们能够自动化流程的某些部分。
1.1.4行业格局
目前有许多相互竞争的web服务框架和建议。三大竞争者是微软的.NET、IBM Web服务和Sun开放网络环境(ONE)。虽然这些框架中的每一个都有自己独特的利基和旋转,但它们都共享这里提出的基本web服务定义和远景。此外,所有框架都共享一组公共技术,主要是SOAP、WSDL和UDDI。
本文不是集中在一个特定的实现或框架上,而是集中在共同的定义和技术上。希望,这将更好地装备你通过市场宣传,了解和评估目前的竞争者。
1.2 Web服务架构
对待web服务体系结构有两种方法。第一个是检查每个web服务参与者的各个角色;第二个是检查正在出现的web服务协议栈。
1.2.1 Web服务角色
web服务体系结构中有三个主要角色:
服务提供商
这是web服务的提供者。服务提供者实现服务并使其在Internet上可用。
服务请求者
这是web服务的任何使用者。请求者通过打开网络连接并发送XML请求来利用现有的web服务。
服务注册中心
这是一个逻辑上集中的服务目录。注册表提供了一个中心位置,开发人员可以在这里发布新服务或查找现有服务。因此,它是公司及其服务的集中票据交换所。
下图显示了主要的web服务角色以及它们之间的交互方式。
1.2.2 Web服务协议栈
查看web服务体系结构的第二个选项是检查正在出现的web服务协议栈。堆栈仍在发展中,但目前有四个主要层。下面是对每一层的简要描述。
服务运输
此层负责在应用程序之间传输消息。目前,这一层包括超文本传输协议(HTTP)、简单邮件传输协议(SMTP)、文件传输协议(FTP)和较新的协议,如块可扩展交换协议(BEEP)XML消息传递
此层负责以通用XML格式对消息进行编码,以便可以在两端理解消息。目前,这个层包括XML-RPC和SOAP。
服务说明
该层负责描述特定web服务的公共接口。目前,服务描述是通过Web服务描述语言(WSDL)处理的。
服务发现
该层负责将服务集中到一个公共注册表中,并提供简单的发布/查找功能。目前,服务发现是通过通用描述、发现和集成(UDDI)来处理的。
随着web服务的发展,可以添加额外的层,并且可以向每个层添加额外的技术。下图总结了当前的web服务协议栈。1.2.3体系结构快照:IBM Web服务浏览器
要深入了解协议栈的实际工作方式,请尝试使用IBM Web服务浏览器。浏览器允许您搜索现有服务,查看其服务描述,并自动调用这些服务。这样,您就可以看到协议栈中的每一层,而无需实际编写任何代码。
要开始,请打开浏览器并转到http://demo.alphaworks.ibm.com/browser/。您应该看到图1-8所示的屏幕。
在右侧窗格中,您可以搜索现有web服务的集中注册表。(注册中心实际上使用了UDDI,但还没有完全了解细节。)在搜索框中,键入“IBM Web服务”,然后单击搜索。IBM将为您搜索集中式目录,并在左窗格中显示所有匹配的结果。选择最后一个名为IBM Web服务TestArea的文件夹,您将看到可用Web服务的列表。(见图1-9。)
单击GetWeatherService,右窗格将显示有关该服务的特定详细信息。(参见图1-10。)数据包括绑定点(指示实际连接到服务的URL)和解释如何与服务接口的服务描述文件。(这些是WSDL文件,但同样,不要太过关注细节。)
单击左窗格中的“查看页面”链接。右窗格现在将显示天气服务的简单用户界面。选择一个城市和州,IBM将自动调用该服务并显示当前的天气状况。(见图1-11。)
IBM浏览器很好地演示了web服务的实际工作,并突出显示了协议栈中的主要层。它还很好地说明了“即时”应用程序集成的潜力。每个服务基本上都充当一个独立的构建块,您可以继续将越来越多的服务堆叠到同一页。最棒的是,你不需要写一行代码就可以做到!
1.3 XML消息
近年来,XML在计算领域迅速发展。它得到了迅速的接受,因为它使不同的计算机系统更容易共享数据,而不管是操作系统还是编程语言。有几十种XML工具,包括解析器和编辑器,这些工具几乎可以用于每一个操作系统和每种编程语言,包括java、perl、python、C++、c、C++和Ruby。当开发人员决定构建web服务消息传递系统时,XML是一个自然的选择。XML消息传递有两个主要竞争者:XML-RPC和SOAP。以下各节介绍了这两种协议。
1.3.1 XML-RPC
XML-RPC是一个简单的协议,它使用XML消息来执行RPC。请求用XML编码并通过HTTP POST发送。XML响应嵌入在HTTP响应的主体中。因为XML-RPC是独立于平台的,所以它允许不同的应用程序进行通信。例如,Java客户机可以向Perl服务器讲XML-RPC。
要获得对XML-RPC的高级理解,请考虑一个简单的天气服务。服务需要一个邮政编码并返回该区域的当前温度。下面是对天气服务的XML-RPC请求示例(省略了HTTP头):请求由一个简单的methodCall元素组成,该元素指定方法名和任何方法参数。
以下是来自天气服务的XML-RPC响应示例:响应由一个指定返回值的methodResponse元素组成。在这种情况下,返回值被指定为整数。XML-RPC是开始使用web服务的最简单方法。在许多方面,它比SOAP更简单,也更易于采用。然而,与SOAP不同,XML-RPC没有相应的服务描述语法。这就防止了XML-RPC服务的自动调用——这是实现实时应用程序集成的关键因素。XMLRPC的更多细节将在第2章中介绍
1.3.2 SOAP
SOAP是一种基于XML的计算机间信息交换协议。尽管SOAP可以用于各种消息传递系统,并且可以通过各种传输协议来传递,但是SOAP的主要关注点是通过HTTP传输的rpc。与XML-RPC一样,SOAP是独立于平台的,因此允许不同的应用程序进行通信。
为了对SOAP有一个更高层次的理解,让我们重新访问我们的简单天气服务。下面是一个示例SOAP请求(省略HTTP头):如您所见,SOAP请求比XML-RPC请求稍微复杂一些。它同时使用XML名称空间和XML模式。但是,与XML-RPC一样,SOAP请求的主体同时指定方法名和参数列表。
以下是来自天气服务的SOAP响应示例:
1.5服务发现:UDDI
UDDI当前表示web服务协议栈中的发现层。UDDI最初是由Microsoft、IBM和Ariba创建的,代表了发布和查找业务和web服务的技术规范。
UDDI的核心由两部分组成。
首先,UDDI是一种技术规范,用于构建业务和web服务的分布式目录。数据以特定的XML格式存储。UDDI规范包括用于搜索现有数据和发布新数据的API详细信息。
其次,UDDI业务注册中心是UDDI规范的一个完全可操作的实现。UDDI注册中心由微软和IBM于2001年5月推出,现在任何人都可以搜索现有的UDDI数据。它还使任何公司能够注册自己及其服务。
UDDI中的数据分为三大类:
白页
此类别包括有关特定公司的一般信息;例如,公司名称、业务说明和地址。
黄页
此类别包括公司或所提供服务的一般分类数据。例如,这些数据可能包括基于标准分类法的行业、产品或地理代码。
绿皮书
此类别包括有关web服务的技术信息(指向外部规范的指针和用于调用web服务的地址)。
下图显示了microsoftudi站点的一个示例屏幕截图。从这个站点,您可以轻松地发布自己的服务或搜索现有的服务。