在网络飞速发展的今天,每个组织都面临着同样一个挑战:在平衡核心能力和已有应用程序时创建同构的环境。IT需要一个简单的,与平台无关的应用程序间通信方式。在这种需求下产生了Web服务,它是一类可以从Internet上获取的服务的总称,它使用标准的XML消息接发系统,并且不受任何操作系统和编程语言的约束。在过去的三年中,出现了三种作为全球标准的主要技术:SOAP,WSDL和UDDI.它们构成了今天Web服务技术的核心。然而所有Web服务协议和新技术都是以XML作为其数据表示层的,XML消除了协议特有的网络,操作系统以及平台绑定限制,因此XML是所有Web服务的基础。
1. XML (Extensible Markup Language)
1.1 XML
Html的诞生使得Web发布变得非常简单,但是HTML存在很大的局限性,由于标准的标记已经由W3C预先确定,所以在描述复杂文档时HTML就显得力不从心。并且HTML是面向描述的,而非面向对象的,因此HTML不会给出内容的含义。为了解决这些问题,W3C开始寻找答案,这就是XML.
XML是可扩展的,我们可以创建自定义元素以满足创作的需要。XML同时也是可结构化的。我们可以检查XML文档的语法,从而避免大量错误的XML文档在Internet上流传。这便是DTD.
1.2 DTD
DTD(文档类型定义)可以看作是标记语言的语法文件,它是一套定义XML标记如何使用的规则,DTD定义了元素,元素的属性和取值,以及哪个元素可以被包含在另一个元素中的说明。DTD还可以定义实体。XML解析器可以使用DTD文件来解析XML文档。DTD使得我们能够发布文档以供其他人共享。一个拥有DTD参考文件的XML文档称为一个有效的XML文档。
然而由于XML DTD并不能完全满足XML自动化处理的要求,例如不能很好实现应用程序不同模块间的相互协调,缺乏对文档结构、属性、数据类型等约束的足够描述等等,所以W3C于2001年5月正式推荐XML Schema为XML 的标准模式。显然,W3C希望以XML Schema来作为XML模式描述语言的主流,并逐渐代替XML DTD.
1.3 XML Schema
XML Schema与XML DTD有很大的区别。XML Schema事实上是XML的一种应用,也就是说XML Schema的格式与XML的格式是完全相同的,而作为SGML DTD的一个子集,XML DTD具有着与XML格式完全不同的格式。这种区别给XML Schema的使用带来了很多好处。如:XML语法分析器可以直接的应用到XML Schema,而不需要修改。另外作为XML的一个应用,XML Schema理所当然的继续了XML的自描述性和可扩展性,这使得XML Schema 更具有可读性和灵活性。同时由于格式完全与XML一样,XML Schema除了可以像XML一样处理外,也可以同它所描述的XML文档以同样的方式存储在一起,方便治理。
1.4 DOM
另外,为了更好的访问XML文档,我们需要用到文档对象模型DOM(Document Object Model),DOM事实上就是采用树状对象集合的方式访问给定文档内容的抽象规范。DOM对象库可以让我们在内存中构建XML语法树,从而提供了更有效的方法来增加文档、定位文档结构、填加,修改和删除文档元素。
有了以上这些规范,XML已经为我们在网络上传输数据提供了一个规范的结构。XML-RPC技术就为通过网络的方法或函数调用提供了基于XML和HTTP的机制。XML-RPC答应程序通过网络调用函数或过程。它只用了很少的XML词汇描述请求和响应的属性,用HTTP协议将信息从客户端传递给服务器。客户端在XML请求中指定过程名和参数,服务器在XML响应中返回一个错误或响应。当然对于普遍运用对象的编程领域,XML-RPC对于许多应用程序来说似乎太受限制了。但当我们需要集成不同类型的系统时,XML-RPC固有的简洁性优势便能体现出来。在我们建立公共服务时,可以用XML-RPC来定义接口,并且选择一种语言来实现它,这样一旦服务在Web上发布,任何具有XML-RPC能力的客户端就能连上它。而且在建立分布式系统时,也可以用XML-RPC作为粘贴码来连接内部网络中的不同部分。因此,虽然XML-RPC很简单,但简单的工具有创造力的应用可以构建复杂而功能强大的体系结构。当各种各样的系统需要通信时,XML-RPC可能是最合适的最低标准。
2. SOAP(Simple Object Access Protocol)
2.1 SOAP
SOAP是一种基于XML的,用于计算机之间交换信息的协议。SOAP能应用于各种消息接发系统,并能通过各种传输协议进行传递,但最初的侧重点是通过HTTP传输的远程过程调用。因此,SOAP能使客户应用程序很轻易地连接远程服务并调用远程方法。
SOAP规范主要定义了四个元素:SOAP信封规范,传输和协议绑定,编码规则和一个RPC协定。
SOAP信封规范,SOAP信封规范对计算机间传递的数据如何封装定义了具体的规则。这包括应用特定的数据,如要调用的方法名,方法参数和返回值;还包括谁将处理封装内容,失败时如何编码错误消息等信息。
数据编码规则,为了交换数据,计算机必须在编码特定数据类型的规则上达成一致,SOAP也有自己的一套编码数据类型的约定。大部分约定都基于W3C XML Schema规范。
RPC协定,SOAP能用于单向和双向等各种消息接发系统。SOAP为双向消息接发定义了一个简单的协定来进行远程过程调用和响应,这使得客户端应用可以指定远程方法名,获取任意多个参数并接受来自服务器的响应。
传输和协议绑定,提供了更底层协议传输SOAP封套的一套通用机制。
源自客户端的请求或来自服务器的响应是一个单向消息,称为SOAP消息。每个消息都有一个强制性的Envelope元素,一个可选的Header元素和一个强制性的Body元素。SOAP请求必须包括要调用的方法名和所有必须的参数。其次还需要定义若干个命名空间,用于区分XML元素和属性,或用于引用外部模式。SOAP响应与SOAP请求相类似。
XML和SOAP能够很好的描述数据,但许多应用程序的数据并不适合用XML来描述,比如图像的二进制数据。这时候就需要SWA(Soap With Attachments)来解决问题。SWA将SOAP协议和MIME格式组合在一起,从而使SOAP消息中可以包含任意想要的数据。
2.2 SOAP-RPC
SOAP-RPC使用SOAP底层结构定义了一个用来表示RPC以及RPC响应的模型。它并不要求一定要紧紧绑定一个同步的请求/响应模型或者一个HTTP协议。实际上SOAP-RPC的使用和协议的绑定是无关的。因此重要的是SOAP定义了一个统一的模型,来表示RPC及其一个或多个返回值。SOAP还提供了对方法签名,头数据和代表目的地的URI进行编码的方法。所以SOAP-RPC比XML-RPC更加复杂,功能也更加强大。
3. WSDL(Web Services Description Language)
WSDL是一种将Web服务描述为一系列访问端点的XML文法,这些端点具有以面向过程或者面向文档的方式交换信息的能力。WSDL描述了四种要害的数据:
描述所有公用函数的接口信息。
所有消息请求和消息响应的数据类型消息。
所使用的传输协议的绑定信息。
用来定位指定服务的地址信息。
总之,WSDL在服务请求者和服务提供者之间提供了一个协议,主要用于描述SOAP服务。WSDL本身使用的是XML语法,可以分为六个主要的元素:
definitions :必须是所有WSDL文档的根元素。它定义了Web服务的名称,声明文档其他部分使用的多个名称空间,并包含所有服务元素。
types :描述在客户端和服务器之间使用的所有数据类型。
message :描述一个单向信息,定义消息的名称,可以包含零个或多个的引用消息参数或消息返回值的消息part元素。
portType : 结合多个message元素,形成一个完美的单向或往返操作。
binding : 描述了在Internet上实现服务的具体细节。
service : 用于定义调用指定服务的地址。一般包含调用SOAP服务的URL.
4. UDDI(Universal Description ,Discovery and Integration)
UDDI是一个描述,发现和连接Web服务的技术规范。有了UDDI,公司不但可以发布Web服务,还能查找Web服务。UDDI的核心由两部分组成。第一,UDDI是一个建立业务和Web服务的分布式目录的技术规范。数据存储在特定的XML格式中,UDDI规范包括搜索已有数据和发布新数据的API细节。第二,UDDI业务注册中心是UDDI规范的一个完全操作实现。
UDDI的技术体系结构由三部分组成:
UDDI数据模型 :一个描述业务和Web服务的XML Schema.
UDDI API :一个用于搜索和发布UDDI数据的,基于SOAP的API.
UDDI 服务群 :一个提供UDDI规范实现的根据预定基础使所与数据同步的操作入口站点。
综上所述,以上的后三种技术以及传输协定组成了一个完整的Web服务的四个层面,自上而下分别为:
发现—— UDDI
描述—— WSDL
XML消息接发 ——XML-RPC,SOAP,XML
传输 —— HTTP,SMTP,FTP,BEEP
这些技术使得Web服务实现了 基于XML,松散耦合,粗粒度,同步或异步能力,支持远程过程调用和支持文档交换等特性,从而让Web服务得到了更广泛的应用。