在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的模式。