1.简介
Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。分布式:设计定好接口,每个系统开放具有一定功能的接口来对外提供服务和数据交换 。Web service 即web服务,它是一种跨编程语言和跨操作系统平台的远程调用技术即跨平台远程调用技术。
三要素:
SOAP、WSDL(WebServicesDescriptionLanguage)、UDDI(UniversalDescriptionDiscovery andIntegration)之一, soap用来描述传递信息的格式, WSDL 用来描述如何访问具体的接口, uddi用来管理,分发,查询webService 。
2.SOAP(简单对象访问协议)
SOAP曾经代表“Simple Object Access Protocol”,但是这种缩写已经在标准的1.2版后被废止了。1.2版在2003年6月24日成为W3C的推荐版本。
soap协议是webservice是传输协议,即简单对象访问协议。Soap协议是xml格式,理解为基于http传输xml数据。
Soap=http+xml
- SOAP 是基于 XML 的简易协议,可使应用程序在 HTTP 之上进行信息交换。
- 采用标准SOAP(Simple Object Access Protocol) 协议传输,soap属于w3c标准。Soap协议是基于http的应用层协议,soap协议传输是xml数据。
- 采用wsdl作为描述语言即webservice使用说明书,wsdl属w3c标准。
- xml是webservice的跨平台的基础,XML主要的优点在于它既与平台无关,又与厂商无关。
- XSD,W3C为webservice制定了一套传输数据类型,使用xml进行描述,即XSD(XML Schema Datatypes),任何编程语言写的webservice接口在发送数据时都要转换成webservice标准的XSD发送。
- 当前非SOAP协议的webService以轻量为首要目标,比如rest webservice也是webservice的一种方式。
wsdl
WSDL 是基于 XML 的用于描述Web Service及其函数、参数和返回值。通俗理解Wsdl是webservice的使用说明书。
wsdl是webservice的使用说明书。根据wsdl去如何调用webservice。从下往上读,找到service服务视图,通过binding找到portType(服务类)。
UDDI
UDDI 是一种目录服务,通过它,企业可注册并搜索 Web services。企业将自己提供的Web Service注册在UDDI,也可以使用别的企业在UDDI注册的web service服务,从而达到资源共享。
UDDI旨在将全球的webservcie资源进行共享,促进全球经济合作。
但是使用webservice并不是必须使用UDDI,因为用户通过WSDL知道了web service的地址,可以直接通过WSDL调用webservice。
UDDI是一个目录服务,存储了全球的webservice地址。
UDDI旨在将全球的webservcie资源进行共享,促进全球经济合作。
Wsdl是什么?
WSDL 指网络服务描述语言(Web Services Description Language)。
WSDL是一种使用 XML 编写的文档。这种文档可描述某个 Web service。它可规定服务的位置,以及此服务提供的操作(或方法)。
WSDL 是一种 XML 文档
WSDL 用于描述网络服务
WSDL 也可用于定位网络服务
wsdl 说明书结构
<service> 服务视图,webservice的服务结点,它包括了服务端点
<binding> 为每个服务端点定义消息格式和协议细节
<portType> 服务端点,描述 web service可被执行的操作方法,以及相关的消息,通过binding指向portType
<message> 定义一个操作(方法)的数据参数(可有多个参数)
<types> 定义 web service 使用的全部数据类型
wsdl 说明书阅读方式
从下往上读
先找到服务视图,通过binging找到protType,找到了protType就找到了我们要调用的webservice方法。
3.JAX-WS
JAX-WS 的全称为 Java API for XML-Based Webservices ,早期的基于SOAP 的JAVA 的Web 服务规范JAX-RPC(Java API For XML-Remote Procedure Call)目前已经被JAX-WS 规范取代。从java5开始支持JAX-WS2.0版本,Jdk1.6.0_13以后的版本支持2.1版本,jdk1.7支持2.2版本。
JAXM(JAVA API For XML Message)主要定义了包含了发送和接收消息所需的API,
SAAJ(SOAP With Attachment API For Java,JSR 67)是与JAXM 搭配使用的API,
为构建SOAP 包和解析SOAP 包提供了重要的支持,支持附件传输等,
JAXM&SAAJ 与JAX-WS 都是基于SOAP 的Web 服务,
相比之下JAXM&SAAJ 暴漏了SOAP更多的底层细节,编码比较麻烦,而JAX-WS 更加抽象,
隐藏了更多的细节,更加面向对象,实现起来你基本上不需要关心SOAP 的任何细节
JAX-RS 是JAVA 针对REST(Representation State Transfer)风格制定的一套Web 服务规范,由于推出的较晚,该规范(JSR 311,目前JAX-RS 的版本为1.0)并未随JDK1.6 一起发行。
需要大家重视,当前比较流行,因为jax-RS可以发布 rest风格webservice,因为rest的webservice不采用soap传输,直接采用http传输,可以返回xml或json,比较轻量。
4.优缺点
优点:
1.采用xml支持跨平台远程调用。
2.基于http的soap协议,可跨越防火墙。
3.支持面向对象开发。
4.有利于软件和数据重用,实现松耦合。
缺点:
1.由于soap是基于xml传输,本身使用xml传输会传输一些无关的东西从而效率不高,
随着soap协议的完善,soap协议增加了许多内容,
这样就导致了使用soap协议去完成简单的数据传输的效率不高。
如果直接用http传输自定义数据内容比webservice开发更快捷,
例如第三方支付公司的支持接口。
5.soap与socket
1.WebService 通过Soap协议进行传输
Socket需要经过三次握手之后才能进行传输。
2.soap协议
基于http的应用层协议,http也是应用层协议。
基于socket传输数据。http或soap都是跨平台的。
jaxws开发webService,传输数据是面向对象的方式,不用程序员自己解析数据。
因为webservice要经过两次序列化,所以传输速度不快。
缺点:
传输慢。
优点:
面向对象开发,soap协议是一个标准协议,方便进行跨平台,跨公司进行接口开发。
应用场景:
不考虑传输速度前提下,根据soap标准协议,方便进行接口定义。
3.Socket协议
是一种传输协议。
常用的是udp、tcp。
Socket是操作系统提供的一套网络接口,不同的编程语言都有实现。Socket是跨平台的。
传输数据时,需要程序员自己去解析数据流。
应用场景:
如果要考虑传输速度,优先使用socket
Socket:
优点:传输速度快
缺点:需要手动解析数据流,如果用socket传输数据需要接口双方定义接口协议格式(传什么格式xml,传什么json???),自定义协议,不方便进行接口开发。
场景:要考虑传输速度,优先使用socket,但是需要自定义协议(接口双方定义一个传输的数据格式)。
Socket开发:
注意:socket服务可持续性,高并发性。
Webservice:
优点:采用标准soap协议,接口双方只要遵循标准协议开发使用接口。通过wsdl知道接口内容。方便进行接口开发。
缺点:传输速度慢。
场景:公开接口,在不考虑客户端类型或传输性能,接口面向整个互联网,优先考虑webservice。
Webservice性能差的原因:如果传输soap经过两次对象序列化,webservice的性能依赖中间件的性能。
6.CXF
Cxf,apache下的webservice的开源框架。
Apache CXF = Celtix + Xfire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF。Apache CXF 是一个开源的 web Services 框架,CXF 帮助您构建和开发 web Services ,它支持多种协议,比如:SOAP1.1,1,2、XML/HTTP、RESTful HTTP 或者 CORBA。
CORBA(Common Object Request Broker Architecture公共对象请求代理体系结构,早期语言使用的WS。C,c++,C#)
Cxf是基于SOA总线结构,依靠spring完成模块的集成,实现SOA方式。
灵活的部署:可以运行有Tomcat,Jboss,Jetty(内置),weblogic上面。
7.Axis2
如果只是需要快速搭建webservice,建议用Jaxws,不需要任何配置,直接java代码搞定;
Eclipse自带的axis2,使用axis2搭建webservice也很方便,不过相对上面还是复杂些;
Axis2是Apache Axis2的简称,是最适合实现SOAP的技术,而Axis2是实现Web Service的一种技术框架(架构)。