45.1. 概述

45.1.1. Web Services与SOA

Web Services是一套用于支持联通的主机间跨网络交互与通信的技术标准。Web Services以多种平台中立的XML技术为基础,为异构平台提供了标准的互操作方式。

最近我们常听到的一个概念是SOA(Service Oriented Architecture)——面向服务的架构。将企业级应用转换为面向服务的架构能达到标准化、服务重用、服务抽象、低耦合、服务组合等多重优良特性。

SOA是一种架构模型,不同的公司可能采取不同的实现方案。但在当前市场环境下,Web Services可以说是更符合SOA原则且使用最为广泛的技术平台。

[注意]注意

注:下文WS或Web服务义同Web Services

45.1.2. Web服务类型

在概念层面上,服务是指通过网络端点对外提供的软件组件。服务消费者和提供者专注于使用标准格式的文档数据交换请求和响应信息,对消息在目的端的处理则不作任何假设。

在技术层面上,服务端对外提供的标准或非正式契约将服务实现与使用者隔离开来,Web服务可以采用任何方式实现,只须服务行为与契约描述相符。

通常使用的Web服务有三类:

  1. RPC方式的Web服务

  2. 基于SOAP的Web服务

  3. REST风格Web服务

45.1.2.1. RPC方式的Web服务

表面看来,RPC方式和基于SOAP的Web服务都使用了WSDL和SOAP,其基本特点是通过WSDL(Web Service Description Language)提供服务契约描述并通过SOAP(Simple Object Access Protocol)消息协议进行服务调用和响应。

RPC是一种传统的Web服务实现方式,实质上它只是通过一个简单的映射,将SOAP消息中携带的调用请求分发到由某一特定语言编写的函数或方法上,然后将调用结果封装返回。从另一角度看,RPC方式的Web服务不过是新瓶装旧酒,基于SOAP的另一种远程过程调用实现方式而已。这种以通用标准迎合老旧技术方案的做法造成服务器端、客户端及其所使用WS实现之间的紧密耦合性,难以达成Web服务设计主要目的之一的互操作性,因而不被WS-I基本协议集(WS-I Basic Profile)支持。

Java平台上通过JAX-RPC提供了RPC方式的Web服务支持。

45.1.2.2. 基于SOAP的Web服务

基于SOAP 的Web服务提供了一套完备的分布式系统技术方案,这中完备性主要体现在如下几个方面:

  1. 规范化的两大基础构件:WSDL和SOAP,基于XML,标准的描述与数据结构易于实现自动化处理,使得WS能够被方便地引入到具体语言平台中。同时,SOAP的协议栈机制为WS调用提供了灵活的处理模型。

  2. 基于SOAP的 Web服务是WS-*兼容的,其中最基本的是WS-I Basic Profile,该规范致力于Web服务互操作性而对Web服务协议集进行限定,这意味着采用SOAP Web服务体系的应用能够方便地集成异构子系统、与外部老旧系统进行整合。另外,其它WS-扩展标准可用于满足企业级分布式系统中某些复杂的非功能性需求,这些标准包括WS安全(WS-Security)、WS可靠性(WS-Reliability)、WS可靠消息(WS-ReliableMessaging)、WS事务(WS-Transaction)和WS寻址(WS-Addressing)。因此,基于SOAP的Web服务也常被称作WS-* Web服务。

  3. 在具体的语言平台上,如Java中,由JAX-WS为客户端异步服务调用提供支持。

在Java EE 6环境中,JAX-WS(JSR-224)和JWS(JSR-109)为基于SOAP的Web服务提供功能性支持,定义了客户端和服务器端编程模型与API。这也是本手册介绍的主要内容。

45.1.2.3. REST风格Web服务

REST(Representatinal State Transfer)的概念源自Roy Fielding博士的论文——Architectural Styles and the Design of Network-based Software Architectures,REST是一种设计风格而不是标准,通常基于HTTP、URI、XML和HTML等广泛流行的协议与标准,该风格将网络应用看作是一种通过网页表征其内部状态的虚拟状态机,并通过用户对链接的选择操作由对应URI代表的服务器资源,进而驱动其状态的转变。

REST风格(RESTFul)Web服务是一种使用HTTP并遵循REST原则的Web服务。RESTFul Web服务从资源URI、服务接受的MIME类型以及约定固化的方法语义三方面定义了一个轻量级基础架构,REST风格Web服务不需要复杂的SOAP消息和WSDL描述,减小了服务开发的复杂度,降低了技术实用的门槛。适用于临时或基本的Web服务整合场景。Java EE 6中通过JAX-RS(JSR-311)提供了RESTFul Web服务的支持。

适用RESTful Web服务的场景通常需要满足如下条件:

  1. 服务完全无状态

  2. 提供者和消费者对于服务契约达成一致理解

  3. 允许采用caching机制提高性能

  4. 资源受限的场合,如PDA等

  5. 在现有网站中整合与分发Web服务

45.1.2.4. 选择适用的Web服务类型

一般来说,由于相对轻量级,RESTful Web服务常用于简单服务发布和跨Web服务集成等场景;另一方面,对于需要灵活定制、异构系统整合、系统间互操作性及服务质量(QoS)有较高要求的企业级应用集成场合,基于SOAP的Web服务则较为适用;同时,配合UDDI,采用WSDL和SOAP的Web服务将更容易发布和发现。

由于业务领域主要面向企业级应用,金蝶Apusic应用服务器对于JAX-RPC(RPC方式Web服务)/JAX-WS(基于SOAP的Web服务)和JWS(WS in JavaEE)规范的支持已经达到了极为完善的程度。在后续版本中我们将加入对JAX-RS的支持。