【何为webService?】
WebService即Web服务,它是一种跨编程语言和跨操作系统平台的远程调用技术,即跨平台远程调用技术。
1. 采用标准SOAP(Simple Object Access Protocol)协议传输,SOAP属于w3c标准,SOAP协议是基于HTTP的应用层的协议,SOAP协议传输的是XML数据。
2.采用wsdl作为描述语言,相当于webService的使用说明书,wsdl属于w3c标准。
3.xml是WebService实现跨平台的基础,xml的主要优点在于它即与平台无关,又与厂商无关。
4.XSD(XML Schema Datatypes),任何编程语言写的WebService接口在发送数据时都要转换成WebService标准的XSD发送,w3c为其制定了一套传输数据类型。
5.当前的 非SOAP协议 的WebService以轻量为 首要目标,比如 REST WebService也是WebService的一种方式。
【WebService的三要素】
1.SOAP
SOAP(Simple Object Access Protocol)即简单访问协议,是一种简单的基于XML协议的,它使应用程序通过HTTP来交换信息,简单理解就是: SOAP=HTTP+XML。
SOAP协议主要使用的版本是 SOAP1.1、 SOAP1.2
SOAP并不是WebService专有的协议,其它协议也使用SOAP传输数据,如SMTP、tr069等
2.WSDL(重点)
WSDL(Web Service Description Language)网络服务描述语言(可以描述网络服务,也可以定位网络服务)。
是一种使用XML编写的文档,用于描述WebService及其方法、参数和返回值,可以规定服务的位置、以及服务提供的方法。
通俗理解就是WSDL是WEbService的使用说明书。
3.UDDI
UDDI是一种目录服务,通过它,企业可以注册并搜索WebService,企业将自己提供的WebService注册在UDDI,也可以使用别的企业在UDDI注册的WebService服务,从而达到资源共享的目的。
UDDI旨在将全球的WebService资源进行共享,促进全球经济合作。
但是使用WebService并不是必须使用UDDI,因为用户通过WSDL可以知道WebService的地址,可以直接投WSDL调用WebService。
【WebService在Java中实现的三种规范】
1.JAX-WS
JAX-WS(Java API for XML-Base WebServices),早期基于SOAP的Java的Web服务规范JAX-RPC目前已经被JAX-WS 规范取代。从java5开始支持JAX-WS2.0版本,Jdk1.6.0_13以后的版本支持2.1版本,jdk1.7支持2.2版本。
2.JAXM&SAAJ(一般不使用)
JAXM(Java API for XML Message)主要定义了发送和接受数据所需的API,SAAJ(SOAP With Attachment API For Java)是与JAXM搭配使用的API,为构建SOAP包和解析SOAP包提供了重要的支持,支持附件传输等。JAXM&SAAJ与JAX-WS都是基于SOAP的Web服务,相比之下JAXM&SOAP暴露了更多SOAP更多的底层细节,编码较为麻烦,而JAX-WS更加抽象,隐藏了更多的细节,更加面向对象,实现时基本不需挂心SAOP的任何细节。
3.JAX-RS
JAX-RS是针对REST(Representation State Transfer)风格指定的一套Web服务规范,由于推出的较晚,该规范(JSR 311,目前JAX-RS 的版本为1.0)并未随JDK1.6 一起发行。
【WebService应用场景】
1.应用程序集成
分布式程序之间进行集成使用WebService直接调用服务层方法,不仅缩短了开发周期,还减少了代码复杂度,并能够增强应用程序的可维护性,因为WebService支持跨平台且遵循表尊协议SOAP。
2.软件重用
将一个软件的功能以WebService方式暴露出来,达到软件重用。如待会后面要写的天气预报功能,将天气查询的功能以WebService接口方式暴露出来,使其非常容易集成在其它系统中。还例如一个第三方物流系统将快递查询、快递等级暴露出来,从而集成在电子商务系统中。
【对使用WebService的建议】
【不建议使用】
场景:同构程序之间的通信
同构程序是指采用相同的编程语言的程序之间的通信。例如java远程调用RMI技术就可以非常高效地实现远程调用,使用简单,必须保证两边的应用都是java编写才可以。
只要有其它方法比WebService更加高效更可行,就不要使用WebService,因为Web跨平台的远程调用方法不止WebService一种。RMI是Java语言提供的远程调用技术,RMI速度会比WebService块的多,但比socket要慢。
【建议使用】
场景1:公开接口
面向互联网公开的接口,例如某公司产品促销的介绍、股票信息查询,因为WebService是互联网的一个标准协议,将接口发布为WebService,其它公司可以很容易的调用。
场景2:调用WebService服务端
作为客户要调用别人的接口,对方的接口使用的是WebService,这时你也用WebService开发客户端,且协议版本要和服务端保持一致。
【WebService优缺点】
优点:
1.采用XML支持跨平台远程调用
2.基于HTTP的SOAP协议,可以穿越防火墙
3.支持面向对象开发。
4.有利于软件和数据重用
缺点:
由于SOAP是基于XML传输的,本身使用XML传输会传输一些无关的东西从而使效率不高,随着SOAP协议的完善,SOAP协议增加了许多内容,这样就导致了使用SOAP协议去完成简单的数据传输效率不高。如果直接使用HTTP传输自定义数据内容比WebService开发更快捷,例如第三方付支付公司的支持接口。