在RESTful
架构中,关注点在于资源,操作资源时使用标准方法检索并操作信息片段,在RPC
架构中,关注点在于方法,调用方法时将像调用本地方法一样调用服务器的方法。
REST
即表述性状态传递Representational State Transfer
,是一种软件架构风格,也可以称作是一种设计API
的模式,REST
通过HTTP
协议定义的通用动词方法GET
、POST
、PUT
、DELETE
,以URI
对网络资源进行唯一标识,响应端根据请求端的不同需求,通过无状态通信,对其请求的资源进行表述,符合REST
设计规范的架构就称为RESTful
架构。
xml
、json
等安全性是指访问REST
接口时不会对服务端资源状态发生改变。
幂等性是指对于同一REST
接口的URI
多次访问时,得到的资源状态是相同的。
GET
: 安全的,幂等的,用于读取资源POST
: 不安全的,不幂等的,用于服务端自动产生的实例号创建资源,更新部分资源PUT
: 不安全的,幂等的,用于客户端的实例号创建资源,更新资源DELETE
: 不安全的,幂等的,用于客户端实例号删除资源user
,GET https://127.0.0.1/user/1
,通过直接携带params
查询用户user
,POST https://127.0.0.1/user
,请求body
附带用户注册信息user
,PUT https://127.0.0.1/user
,请求body
附带userid
标识信息user
,DELETE https://127.0.0.1/user
,请求body
附带userid
标识信息Accept
来获取同一资源的不同形式,如application/json
与application/xml
等Accept
字段来区分版本而不是直接在URI
中添加版本号RPC
即远程过程调用Remote Procedure Call
,简单的理解是一个节点请求另一个节点提供的服务,远程过程调用,是相对于本地过程调用来说的,当调用方法时就像调用本地方法一样调用远程服务器的方法,做到了轻量、无感知通信。
客户端client
:服务的调用方
服务端server
:服务的提供方
客户端存根client stub
:将客户端请求参数打包成网络消息,再发给服务方
服务端存根server stub
:接收客户端发来的消息,将消息解包,并调用本地方法
在通信协议方面来说,RESTful
是使用HTTP
协议进行数据传输,RPC
一般是使用TCP
协议数据传输,当然传输协议并不是RPC
的重点,一般使用TCP
协议传输是因为其效率高,使用HTTP
协议传输是完全可行的。
在性能方面,RPC
的传输效率高于RESTful
数据传输的效率,因为RCP
具有高效紧凑的进程通信机制,且传输数据量小,在交换大量消息时效率高。
在灵活度方面,RESTful
架构的灵活度高于RPC
架构,使用RESTful
架构具有比较好的可读性,RPC
在编写与调试时略显繁琐。
使用RESTful
架构的接口进行数据传输可以得到多语言支持,HTTP
协议相对更规范、更通用、更标准,对于中间件而言最先支持的几种协议都包含RESTful
数据传输规范。
内部服务的相互调用推荐使用RPC
,而对外的接口推荐使用RESTful
,例如微服务架构模式一般就采用对内RPC
对外RESTful
的模式。