Web Service概述
Web Service是一个平台独立的、低耦合的、自包含的、基于可编程的Web应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。
在Web Service的体系架构中有三个角色:服务提供者(Service Provider),也叫服务生产者;服务请求者(Service Requester),也叫服务消费者;服务注册中心(Service Register),也叫服务代理,服务提供者在这里发布服务,服务请求者在这里查找服务,获取服务的绑定信息。三个角色之间的关系如图所示。
角色间主要有三个操作:
- 发布(Publish),服务提供者把服务按照规范格式发布到服务注册中心;
- 查找(Find),服务请求者根据服务注册中心提供的规范接口发出查找请求,获取绑定服务所需的相关信息。
- 绑定(Bind),服务请求者根据服务绑定信息对自己的系统进行配置,从而可以调用服务提供者提供的服务。
Web Service规范了体系中的各种关键技术,包括服务描述、发布、发现以及消息传输等,参考模型如图所示。
规范
Web Service的规范包括基本规范(WSDL、SOAP、UDDI)以及扩展规范WS-*(WS-Security、WS-Policy、WS-Addressing、WS-Trust等)。
WSDL
WSDL(Web Service Description Language/Web服务描述语言)是用XML文档来描述Web服务的标准,通过WSDL可描述Web服务的三个基本属性:
- 服务能做什么(服务所提供的操作/方法)
- 如何访问服务(和服务交互的数据格式以及协议)
- 服务位于何处(与协议相关的服务地址,如URL)
WSDL文档以端口集合的形式来描述Web服务,WSDL服务描述包含对一组操作和消息的一个抽象定义、绑定到这些操作和消息的一个具体协议、以及一个网络端点规范。WSDL文档被分为服务接口(Service Interface/抽象)定义和服务实现(Service Implementation/具体实现)定义,WSDL基本结构如图所示。
WSDL文档中主要元素:
- 抽象定义
- Types:定义Web服务使用的所有数据类型集合,可被元素的各消息部件所引用。
- Messages:通信消息数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构,包括函数参数或文档描述。
- PortTypes:引用消息部分中消息定义来描述函数签名(操作名、输入参数、输出参数)。
- 具体定义
- Operation:对服务中操作的抽象描述。一个Operation描述了一个访问入口的请求/响应消息对。
- Bindings:portType部分的操作在此绑定实现,包含了如何将抽象接口的元素转变为具体表示的细节。
- Port:定义为协议/数据格式绑定与具体Web访问地址组合的单个服务访问点。
- Services:确定每个绑定的端口地址。
portType、message和type描述了Web服务是什么,binding描述了如何使用Web服务,port和service描述了Web服务的位置。
SOAP
SOAP(Simple Object Access Protocol/简单文件传输协议)是一个轻量的、简单的、基于XML的协议。
SOAP包括四个部分:
- SOAP封装(envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架。
- SOAP编码规则(encoding rules),用于表示应用程序需要使用的数据类型的实例。
- SOAP RPC表示(RPC representation),表示远程过程调用和应答的协定。
- SOAP绑定(binding),使用底层协议交换信息。
SOAP的基本结构包含以下元素:
- Envelope(必须)标识文档为SOAP消息,是SOAP的根元素。
- Header(可选)包含头部信息,如果SOAP消息有Header,则Header必须是Envelope的第一个子元素。
- Body(必须)包含所有的调用和响应信息。
- Fault(可选)提供错误消息。
SOAP格式
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<auth xmlns="http://www.tmp.com/auth">
<name>admin</name>
<password>admin</password>
</auth>
</soap:Header>
<soap:Body>
<ns2:welcome xmlns:ns2="http://www.tmp.com/services/hello">
<name>[email protected]</name>
</ns2:welcome>
</soap:Body>
</soap:Envelope>
UDDI
UDDI(Universal Description, Discovery and Integration/通用描述、发现和集成)主要提供基于Web服务的注册和发现机制,为Web服务提供三个重要的技术支持:
- 标准、透明、专门描述Web服务的机制。
- 调用Web服务的机制。
- 可以访问的Web服务注册中心。
WS-Policy
WS-Policy(Web Services Policy Framework/Web服务策略框架)提供了一种灵活、可扩展的语法,用XML表示Web Services系统中实体的能力、要求和一般特性。WS-Policy将策略定义为一组策略替换选项,其中每个策略替换选项又是一组策略断言。WS-Policy将策略断言分为两类,一类指传统的要求和功能,这些要求和功能最终将出现在网络中(如身份验证方案、传输协议选择等)。另一类策略断言并不直接表现在网络中,但却对正确地选择和使用服务至关重要。
WS-Addressing
WS-Addressing(Web服务寻址)为Web Services提供一种与传输层无关的、传送寻址信息的机制。WS-Addressing主要由两部分组成:传送Web Services端点的引用数据结构,以及一套能够在特定的消息上关联寻址信息的消息寻址属性。
WS-ReliableMessaging
WS-ReliableMessaging定义了一种协议和一套机制,使Web Services开发人员能够确保在两个端点之间可靠的传递消息,该规范具有各种传递保证和健壮性特征。
WS-Security
WS-Security以现有的密码学以及XML加密和签名行业标准为基础,为Web Services应用程序提供了一组全面的安全特性,可以通过WS-Policy和WS-SecurityPolicy来指定特定应用程序可以使用哪些特性,从而允许服务客户机自行配置以访问服务。
WS-Security覆盖以下三方面内容:
- 描述通过消息完整性、消息机密性和SOAP消息传递的增强质量。
- 提供关联安全性令牌和消息的通用机制。
- 描述如何对二进制安全性令牌编码。
WS-Security提供三种主要机制:
- 安全性令牌传播
- 消息完整性
- 消息机密性
WS-SecurityPolicy
WS-SecurityPolicy以WS-Policy为基础,采用声明方式来定义可用于指定安全相关策略的XML元素,声明允许Web Services明确地指定其策略。
JAX-WS
JAX-WS(Java API for XML-Based Web Services)是一组XML Web Services的Java API,用于简化使用Java发布Web Services和生成Web Services客户端。JAX-WS提供了完整的Web Services堆栈,可减少开发和部署Web Services的工作量。JAX-WS允许开发者选择RPC-oriented或者message-oriented来实现自己的Web Services。JAX-WS支持WS-I Basic Profile 1.1,还包括Java Architecture for XML Binding(JAXB)和SOAP with Attachments API for Java(SAAJ)。
JAX-WS 2.0的主要特性:
- 新的API和新的编程模型。新的API主要包含在javax.xml.ws包中,包括服务端和客户端的一些核心类。
- 新的编程模型包括增强的Handler Framework、异步调用和Provider/Dispatch动态编程模型。
- 使用注解来描述Web Services,不再依赖Web Services描述文件。
- 通过JAXB 2.0完成XML数据和Java对象的绑定。
- MTOM/XOP(SOAP Message Transmission Optimization Mechanism/XML Binary Optimzied)和swaRef(SOAP Attachment Refenreces)解决SOAP消息传输二进制附件的问题,同时优化消息传输。
- 对SOAP 1.2提供支持。
JAX-WS开发Web Services有契约优先方法与代码优先方法,契约优先是指从WSDL生成Java类来实现Web服务。代码优先是指从Java类着手,使用注解来生成WSDL文件。
版权声明:本文为博主原创文章,未经博主允许不得转载。