转自:http://blog.csdn.net/zhouyong0/article/details/7734810
这段时间自己在查资料的时候,又看到了一些关于webservice、rpc、rmi、soa、rest等方面的说明,越发感觉到混乱。主要是对它们的区别和联系不是那么清楚,所以决定重新理解和学习下webservice相关的一些概念和定义。
WEBSERVICE
W3C的定义是webservice是一个软件系统,用以支持网络间不同机器的互动操作。
受外部环境和实现技术影响,目前普遍认为webservice的技术核心是
soap,wsdl(一个XML格式文档,用以描述服务端口访问方式和使用协议的细节。通常用来辅助生成服务器和客户端代码及配置信息),uddi(一个用来发布和搜索WEB服务的协议,应用程序可借由此协议在设计或运行时找到目标WEB服务)
这些标准由这些组织制订:W3C负责XML、SOAP及WSDL;OASIS负责UDDI。
个人理解是webservice是一个web服务体系,它逻辑性的为其他应用程序提供数据与服务,各应用程序通过网络协议和规定的一些标准数据格式来访问webService。webService可以执行从简单的请求到复杂商务处理的任何功能。一旦部署以后,其他webService应用程序可以发现并调用它部署的服务。所以只要能达到web服务的发布和其它平台或者应用的正常访问,应不拘泥于固定的数据传输方式和数据承载格式。
webservice三种最普遍的实现方式是:
远程过程调用(RPC)
面向服务架构(SOA)
表述性状态转移(REST)
我在这里说的实现方式并不是说 这三种方式是包含于webservice,个人理解它们之间应该是存在交集,即它们是有联系的同时它们也是有不同的,应该不是从属的关系。
维基百科上的定义:http://zh.wikipedia.org/wiki/Web%E6%9C%8D%E5%8A%A1
RPC
rpc(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。 rpc不依赖于具体的网络传输协议,tcp、udp、http等都可以。由于存在各式各样的变换和细节差异,相应的rpc也派生出了各式远程过程通信协议。
rpc基于请求应答模式,客户端发送调用信息(将远程方法名、参数打包进请求信息)到服务端,服务端解析到要调用的对象和方法执行后返回应答信息;客户端接受相应获取应答信息。
rpc是跨语言的通信标准,sun和微软都有其实现,微软的DCOM就是建立在ORPC协议之上。
rpc是面向过程的编程模型。
维基百科上的定义:http://zh.wikipedia.org/zh-cn/RPC
XML-RPC
xml-rpc是rpc的一种派生协议,全称是XML Remote Procedure Call,即XML远程过程调用。
它是一套允许运行在不同操作系统、不同环境的程序实现基于Internet过程调用的规范和一系列的实现。这种远程过程调用使用http作为传输协议,XML作为传送信息的编码格式。
维基百科上的定义:http://zh.wikipedia.org/wiki/XML-RPC
SOAP
soap全写为Simple Object Access Protocol 简单对象传输协议 是一个用于分布式环境的、轻量级的、基于XML进行信息交换的通信协议,它被设计成在 WEB 上交换结构化的和固化的信息。 SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。
之所以说是对象,是因为把访问的Web服务称为对象,既然服务是对象,那么服务肯定有相关的属性和调用行为,这些属性和行为是通过WSDL来描述的。如果按“简单的对象访问协议”来理解,相比“简单对象访问协议”要容易些。
可以认为SOAP是XML-RPC的高级版本(soap传输的是xml数据对象),二者基于相同的原理:利用HTTP + XML封装进行RPC调用,所以soap也是rpc协议的一种派生。
另外,SOAP最初由MS发起研究,用以解决MTS/COM资源消耗大,不够轻巧等问题,后逐渐被IBM等巨头接纳并加入研究,现已提交W3C,成为Web Service应用传输标准。
维基百科上的定义:http://zh.wikipedia.org/zh-cn/SOAP
json-rpc 、和php-rpc也是是rpc的一种派生协议,和xml-rpc的不同是数据的承载方式用的是json数据格式和php的数据对象序列化方式。
RMI
rmi全程Remote Method Invocation 即远程方法调用 它是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口。它使客户机上运行的程序可以调用远程服务器上的对象。远程方法调用特性使Java编程人员能够在网络环境中分布操作。RMI全部的宗旨就是尽可能简化远程接口对象的使用。Rmi依赖于java语言是rpc在java环境的一种实现形式。RMI是面向对象的编程模型。广泛应用与EJB架构系统中。
基于java远程消息交换协议JRMP通信;JRMP是专为java远程对象制定的协议。RMI对非java语言应用程序支持不足,不能实现互通。
RMI基于调用的模式,调用过程如下:客户端程序调用服务对象的客户端代理,代理负责打包参数并通过JRMP协议发送到服务端,服务端使用同样协议解析,执行业务逻辑处理,用同样方法返回结果给客户端。
维基百科中的定义:http://zh.wikipedia.org/wiki/Java_RMI
SOA
soa全程 Service-oriented architecture 面向服务架构,是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互。
百度百科中的定义:http://baike.baidu.com/view/6545280.htm
维基百科中的定义:http://zh.wikipedia.org/wiki/SOA
REST
rest即REST(Representational State Transfer表述性状态转移)是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。
百度百科中的定义:http://baike.baidu.com/view/1077487.htm
维基百科中的定义:http://zh.wikipedia.org/wiki/REST
本篇博文只是根据webservice相关技术的概念来理解它们的联系和不同,以后有时间我会对它们使用上的不同来进一步的比较。