来源:极链科技作者:刘聪
说到接口的设计大部分人第一个想到的可能是REST;的确,REST是目前最为普遍的一种接口设计方式,并且作为一个优秀的接口设计标准而被广泛使用,但是除此之外,我们也不应该忘记还有其他的选项。除了REST,我们还有rpc(或者grp),最近大火GraphQL,以及webhooks.为了好的了解这几种设计以及背后的优缺点,我们一一做简单的介绍。
REST首先REST--ResourceRepresentationalStateTransfer,中文直译就是资源在网络中以某种表现形式进行状态转移;光这么看确实还是比较头大,每个单词拆开可能比较好理解;
Resource:资源,那对于程序来讲就是数据;
Representational:表现形式,我们在web开发中常用的传输类型比如TXT、HTML、JSON、XML、JPEG等;
StateTransfer:状态变化,对应的是HTTP协议中的动词(常用的动词如:GETPOSTPUTPATCHDELETE);
REST基于HTTP,所以也是无状态的,以HTTP的各种动词来定义约定一系列的URL来操作资源;它描述的是网络中client与server的一种交互形式。
但是我们在谈REST的时候其实并不是谈论REST本身,而是RESTfulAPI,即REST风格的网络接口设计;来看几个最基础RESTfulAPI的URL:
GET/api/users:列出所有用户POST/api/users:新建一个用户GET/api/users/ID:获取一个用户的指定信息PUT/api/user/ID:更新某个指定用户的信息(全部信息)PATH/api/users/ID:更新某个指定用户的信息(部分信息)DELETE/api/users/ID:删除某个用户从上面的例子我们也可以看出RESTfulAPI的设计的URI使用的基本都是名字,具体动词其实是依赖HTTP中的各个动词来指定不同的动作(这也是在设计RESTfulAPI时容易产生误用的地方,会把动词放在URI上);
REST的优点也比较明显:客户端与服务器分离,简化服务器逻辑以及提高可伸缩性;无状态,降低服务器资源使用(相对于有状态的长连接),同时提高服务器的可扩展性;由于不同的信息返回时可以分开标记是否可以缓存,使得客户端可以重用之前的信息,减少客户端与服务端的交互次数。
RPC/gRPC首先RPC--RemoteProcedureCall(远程过程调用),相信大家不会陌生,主要是用于服务器之间的方法调用。RPC的本质是提供轻量无感知的跨进程通信方式,与上面基于HTTP的RESTfulAPI并不是对立的,并且应用的场景也有所区别;