1.2.4 Web服务技术与应用
1.2.4.1 Web服务概述
SOA(Service-Oriented Architecture,面向服务的架构)是在网络和各种技术期刊上频繁出现的名词。随着新技术的发展与行业应用的推进,对系统的跨平台、互操作、灵活性、开放性方面提出更高的要求。SOA架构理念在这些方面渐显优势,在软件开发、业务集成中备受青睐,已成为当前热门的架构体系。
SOA不是一种具体的技术,而是面向服务的一种架构思想,是一套基于服务理念的方法论。SOA作为一种架构模型,需要具体的技术体系支撑。有人说,SOA是与Web Service共发展的。由此可见,在目前环境下Web Service(Web服务)是实现SOA实际应用的关键。SOA作为设计原则,Web Service则是一种技术规范。从本质上看,SOA是一种架构模式,而Web服务是利用一组标准实现的服务。
所谓Web Services(Web服务),是指那种自包含、自描述、模块化的应用程序,这类应用程序能够被发布、定位,并通过Web实现动态的调用。从表面上看,Web服务向外界暴露出一个能够通过Web进行调用的API,用户能够用编程的方法通过Web来调用这个API,即使用这个应用程序。Web服务所实现的功能,可以是从简单请求到复杂商业过程的任意功能。一旦一个Web服务被配置完毕,其他的应用程序,包括其他Web服务就能够发现并调用该服务。因此,利用Web服务技术,可以很好地实现服务在Web层次的互操作,并实现服务整合。
Web服务是基于XML和HTTPS的一种服务,其通信协议主要基于SOAP,服务的描述采用WSDL,通过UDDI来发现和获得服务的元数据。因此,涉及的主要技术包括XML、SOAP、WSDL、UDDI等。
Web Service体系如图1-9所示。
图1-9 Web Service体系
1.XML
XML标准是一个基于文本的W3C组织规范的标记语言。与HTML使用标签来描述外观和数据不同,XML严格地定义了可移植的结构化数据。它可以作为定义数据描述语言的语言,如标记语法或词汇、交换格式和通信协议。XML是Web服务中表示数据的基本格式,既与平台无关,也与厂商无关。
2.SOAP
SOAP最初为简单对象访问协议(Simple Object Access Protocol),是一个基于XML的、用于在分布式环境下交换信息的轻量级协议,它被设计成在Web上交换结构化的和固化的信息。SOAP在请求者对象和提供者对象之间定义了一个通信协议,这样在面向对象编程的环境中,该请求对象可以在提供的对象上执行远程方法调用。SOAP的优点在于它完全和厂商无关,相对于平台、操作系统、目标模型和编程语言可以独立实现。
3.WSDL
Web服务描述语言WSDL (Web Services Description Language)是一个提供描述服务IDL标准方法的XML词汇,用于描述Web Service及其函数、参数和返回值。WSDL规范定义了一个XML词汇表,该词汇表依照请求和响应消息,在服务请求者和服务提供者之间定义了一种契约。我们能够将Web服务定义为软件,这个软件通过描述SOAP消息接口的WSDL文档来提供可重用的应用程序功能,并使用标准的传输协议来进行传递。
4.UDDI
UDDI(Universal Description, Discovery and Integration,通用描述、发现和集成)协议向Web服务注册中心定义SOAP接口。如果有一段代码希望作为Web服务部署,UDDI规范定义如何将该服务描述添加至注册中心;如果寻找一段提供某种功能的代码,UDDI规范定义如何查询注册中心以找到想要的信息。
Web服务技术能够很好地克服异构系统之间平台、语言、协议的差异,实现无缝、松耦合的系统集成。其突出的优点表现在几个方面:实现异构平台间的互通,实现更广泛的软件复用,具有更强大的通信能力。
目前,Web服务已广泛应用,几乎绝大部分Web系统都会采用面向服务的架构设计,使用Web服务技术来实现。
1.2.4.2 基于SOAP的Web服务
基于SOAP的Web服务占据IT产业Web服务的大部分市场份额。SOAP是在分散或分布式的环境中交换信息的简单协议,以XML作为数据传送方式,采用的通信协议可以是HTTP/HTTPS(最广泛应用)协议,也可以是SMTP/POP3协议,或为一些应用专门设计的特殊通信协议。通常,SOAP被简单理解为SOAP=RPC+HTTP+XML,即SOAP采用HTTP和XML协议,HTTP用于实现其RPC风格的传输,而XML是它的编码模式。
基于SOAP类型的Web服务,一般通过服务代理类进行调用。不管是J2EE或.NET框架实现的SOAP服务,都可直接通过引用服务的方式自动生成代理类,或者通过相应的工具生成代理类,最后在程序中通过其代理类调用服务。
针对SOAP类型的Web服务,如果在.NET环境下的程序中调用,可直接在VS中引用服务自动生成代理类,或者用工具(如wsdl.exe与csc.exe工具,wsdl.exe将wsdl的XML格式文件转成.cs文件,再用csc.exe将.cs文件编译成.dll)生成服务代理类(DLL文件);如果在Java环境下的程序中调用,一般通过工具(如apache的cxf等)生成Java的代理类(JAR文件)实现。
1.2.4.3 REST风格的Web服务
代表性状态传输(Representational State Transfer, REST)在Web领域已经得到了广泛的接受,是基于SOAP和WSDL的Web服务的更为简单的替代方法。REST把网络上的所有事物抽象为资源,把对资源的操作抽象为CRUD,对应HTTP的PUT、Get、Post、Delete。注意此处的资源不是静态的数据,而是数据加上状态,是随时间变化的,每个资源有一个唯一的标志,即URL。
REST类型的服务是一组非常便于理解的URL,将互联网上的一切都表示为资源,对函数的调用将转化为对资源的HTTP请求。基于REST风格的Web服务,可直接通过浏览器调用,即基于HTTP协议进行通信,返回XML、JSON(JavaScript Object Notation)等格式数据。
REST风格的Web服务,其具体实现应该遵循以下四个基本设计原则:
■ 显式地使用HTTP方法;
■ 无状态;
■ 公开目录结构式的URI;
■ 传输XML、JSON,或同时传输这两者。
针对REST服务的特性,可以在JavaScript中大量使用REST风格的Web服务,以请求资源的JSON等表示形式,并快速将其转化为JavaScript对象,而无须使用传统的服务端开发方式实现。由此,REST服务结合JavaScript的纯客户端开发,将大幅度减少工程的复杂度与代码量,凸显REST架构设计的优势。
目前,大部分Web开发者了解并选用REST服务——一种采用标准URI进行服务调用的方案,简单易用,更为灵活。基于SOAP的Web服务功能强大、全面,虽然使用较为复杂,但SOAP作为一个工业标准,具备良好定义的协议和一套良好确立的规则,在很多大型和小型Web系统中均有采用,仍然是Web服务应用的重要角色。对于Web开发者来说,目前上述两种方案都是行之有效的方案。REST和SOAP都能解决许多Web方面的问题与挑战,而且在许多情况下它们各自都能满足开发者的要求,同时两者还可以搭配使用。