- SOA 面向服务的架构【面向消息】
- RPC 远程过程调用的架构(remote procedure call)【面向方法】
- REST 表征状态转移的架构(Representational state transfer)【面向资源】
RMI(RemoteMethod Invoke,远程方法调用):
RMI中封装了对象和请求的网 络传送,使得异地的对象服务直接可用。但RMI的使用必须是在能够识别java代码的环境下使用。 RPC(Remote Method Invocation,远端过程调用) 与RMI的区别很明显,相比于RMI直接获取远端方法的签名,进行调用的方式,RPC使用的是C/S方式,发送请求到服务器,等待服务器返回结果。
SOAP是在计算机之间交换信息的基于XML的协议,主要侧重于通过HTTP传输RPC。它利用了XML的命名空间和XML模式(XML Schema),比XML-RPC更具适用性,能够支持更多的类型及数据结构。 简单的说,SOAP定义了如何将一个对象编码成一种格式并通过一种协议传送到另一个地方并还原的规范。当然很多东西都是现成的,对象编码后的格式是XML,传输的应用层协议是HTTP。 HTTP也并没有定义如何在网络上进行通信,其所使用的是TCP协议,TCP也没有定义在路由之间如何传输包,那是IP协议。
通过WSDL文件中所获得的方法和变量名来进行远程过程调用。
WS-Security(安全)
- 用于访问服务的地址信息
- 用于传送信息的传输协议(例如,通道数)
- 用于所有可使用功能的名称和接口使用方法
- 在所有的请求和响应中所使用的数据类型
SOAP数据包结构解析
SOAP的消息被称为一个SOAP Envelope,包括SOAP Header和SOAP Body。其中,SOAP Header可以方便的插入各种其它消息来扩充Web Service的功能,比如Security(采用证书访问Web Service),SOAP Body则是具体的消息正文,也就是Marshall后的信息。
SOAP调用的时候,也就是向一个URL(比如 http://api.google.com/search/beta2 )发送HTTP Post报文(根据SOAP规范,HTTP Get报文也可被支持),调用方法的名字在HTTP Request Header SOAP-Action中给出,接下来就是SOAP Envelope了。服务端接到请求,执行计算,将返回结果Marshall成XML,用HTTP返回给客户端。
REST最适合的应用场景是需要对外暴露服务的情况;
最不适合的应用场景是对性能要求高的系统内部的服务调用。
RPC与REST的比较
RPC是以动词为中心的,REST是以名词为中心的,此处的动词指的是一些方法,名词是指资源。REST强调资源(名词)有统一的接口以此来对它们寻址,而RPC强调过程(动词)有统一的接口来激发它们
你会发现,以动词为中心,意味着,当你要需要加入新功能时,你必须要添加更多的动词, 这时候服务器端需要实现 相应的动词(方法), 客户端需要知道这个新的动词并进行调用.
而以名词为中心, 假使我请求的是 hostname/friends/, 无论这个URI对应的服务怎么变化,客户端是无需 关注和更新的,而这种变化对客户端也是透明的.
一个基于RPC的架构,动词数量是 没有限制的。REST说,我们使用四个动词——非常熟悉,HTTP标准的GET、POST、PUT以及DELETE——来进行请求和响应,REST使用资 源寻址来处理其可变性
至于其它的区别,如对实现语言的依赖, 耦合性等,这些都是上面提到的这个根本区别所衍生的
REST回归HTTP最初的设计;RPC仅仅只是把HTTP作为传输协议来使用。
REST是由超文本驱动的;RPC是由方法驱动的。
REST强调HTTP通信的语义可见性,通过消息头和标准的HTTP方法来体现;RPC把语义封装在HTTP消息体中。
CXF可以很好支持Spring。Axis2不能;
Axis2支持多语言-除了Java,他还支持C/C++版本