RPC、WebService、Restful、Json、Xml这些概念之间的关系
RPC有2层含义:
(1) (协议层)编码方式
(2) (传输层)传输方式
RPC |
||||
协议层\传输层 |
TCP |
WebSocket |
Http(WebService) |
|
文本 |
XML |
/ |
/ |
Xml-Http(SOAP) |
Json |
Json-RPC(TCP) |
Json-RPC(WebSocket) |
Json-Http |
|
Yaml |
* |
* |
* |
|
WSDL |
/ |
/ |
* |
|
* |
/ |
/ |
Corba |
|
* |
/ |
/ |
RMI |
|
|
|
|
|
|
|
|
|
|
|
2进制 |
Thrift |
Thrift |
/ |
/ |
Protobuf |
Protobuf |
|
gRPC |
|
MsgPack |
MsgPack |
/ |
/ |
|
hessian |
hessian |
/ |
/ |
|
dobbo |
dobbo |
/ |
/ |
|
|
|
|
|
|
|
|
|
RestFul |
|
|
|
|
|
|
有些概念(技术)之间的关系不适合比较,因为不属于同一个层次;比如Restful、WebService, etc。
众所周知,Json-RPC很普遍;但是Json-RPC并没有限制承载协议,不必只能用Http,WebSocket、TCP照样可以。
有一个地方大家误会很多,Restful,以为与Http关系严密就像搞基;其实,RestFul也没有限制承载协议(会话层协议),不必非要Http,满足Restful的原则即可。
另外,RestFul并非什么新鲜东西,其实满大街都是;我们能看见的Web服务,大多数是RestFul的,只不过实现不像RestFul期望得那么完整。
(图表里,对Corba、RMI的归类很大可能是错的,对于这些老古董,其实不必太关心)