后端接口服务化的意义

每个公司都有一个核心业务,当我们在开发核心业务的时候,我们就跟着业务走,有新的功能新增一个接口,
前端写完页面,前后端联调,然后搞定。在这个阶段,这么做无可厚非,因为核心业务基本是不会重叠的。
但是公司发展壮大之后,产品线就会进行扩展,不管对内还是对外。产品线扩展之后,数据类型并不是同步增长的,
数据更多是以组合得方式进行扩展。这个时候我们再跟着需求来写接口就会发现,我们做了很多重复工作。

加入:我们有一个用户体系,我们有两个内部系统和一个app具有用户操作权限(指对所有用户都有可操作权限),
所以我们在这三个系统上都需要调用用户列表的接口。而app和web端由于交互形式不同,显示的数据也不同,同时app
端还因为希望省流量所以希望返回的字段尽量少。那么我们发现以传统的RPC形式开发的接口明显是不能满足需求的,
我们需要对每个系统都提供一个获取用户列表的接口,这就是资源浪费以及重复劳动。

这就是后端接口服务化的意义,服务化代表着这接口是面向大众的,没有业务耦合性,所有地方都可以调用。

restful api design

rest是最经典的接口服务化设计方案,其基于http,充分利用http协议的特性,无状态的特点非常适合业务的解耦。
我们来看一个简单的例子:

我们有一个user数据库,我们需要对用户进行增删查改的操作,于是我们有如下的设计:

1
2
3
4
5
6
GET     http://host:port/user/:id
POST http://host:port/user/:id
PUT http://host:port/user
DELETE http://host:post/user/:id

PATCH http://host:post/user/:id // 局部修改

非常简洁明了得表示了获取用户修改用户新增用户删除用户的操作

当然光这些操作肯定是不能涵盖所有的业务场景的,于是我们就来列举一下一些常见的业务场景。

列表

列表请求是最常见的请求之一,所以基本上我们也是最方便来进行抽象的接口:

1
GET    http://host:port/query/user?filter={...}

基本上就是GET请求不带id,带上删选条件

批量操作

常见的批量操作例如:批量删除,批量新增,批量修改等

1
2
3
4
5
6
7
8
9
POST|PUT|DELETE|PATCH    http://host:port/

{
data: [
{
// ... single action data
}
]
}

其他类型接口

auth

其他好处

restful api的设计对于代码复用也是有促进作用的,因为所有变化的内容都是作为参数出现的,那么很容易就能把不变的东西封装起来,
比如CRUD请求做到极致我么可以把资源名(如/user)也看做参数(/:className),可以我们接收到一个CRUD请求的时候,
我们完全可以动态得去获取数据。