一、rest:
REST 不是一种协议,它是一种架构。大部分REST的实现中使用了RPC的机制,大致由三部分组成:
1、method:动词(get、post之类的)
2、Host:URI(统一资源标识),服务器,端口
3、Path:名词(路径,服务器里面的某个东西)路径的结尾是资源的形态(如html、text、image、pdf等)
即、对 host 里面的某个 Path 里面的东西做一些 get 或 post 操作。
二、rpc:
RPC 是一种技术思想而非一种规范或协议,通常的调用过程为:把函数序列化,远端收到后,再把函数反序列化,完成函数调用。
三、rest 和 rpc 的区别
REST:想对服务器里面的资源进行操作,下载服务器端的当前状态,修改之后将最终用户所期待的状态发送给服务器,服务器按照客户的期待进行修改。修改代码在客户端,所以REST风格客户端逻辑相比客户端更复杂。自由度更大一些,但因此造成失误的可能性也大一些。传输层基于HTTP,相比于TCP,多了一层协议。但基于HTTP传输,可以穿越防火墙,适合组织内向组织外提供服务。
RPC:想对服务器里面的资源进行修改,首先需要了解服务器中各个接口都是干啥的,然后把相关参数传给服务器提供的接口,让服务器自己去执行修改。修改代码在服务端,所以RPC服务端逻辑更复杂些,服务器会有很大的工作量,但分工明确,不容易造成失误。可以基于TCP或HTTP,如果基于TCP,将少一层协议。
四、例子
如果想对服务端数据库里面的一个数进行 加1、减1 这两种操作。两种不同的实现方式如下:
REST中:服务端只要留一个接口就可以了,作用是更改数据库里面的数(不管它是加了还是减了),然后客户端有两个函数,分别进行加操作和减操作,但客户端操作完都提交给同一个服务端函数,然后更改数据库。
RPC中:服务端应该留两个接口函数,分别对应加1和减1操作,当客户端需要进行修改时,先要弄明白哪个做加1操作、哪个做减1操作,然后入参调用,让服务端进行加1,减1操作后更改数据库。
五、目前流行架构