Api接口风格

2022-12-27 20:20:29 浏览数 (1)

前后端数据交互,经常要和 Api 打交道,于是关于 Api 接口的设计,有必要好好写一写

Restful api 风格​

首先还是得说一下REST 是设计风格而不是标准,也就是在写 api 接口的时候,喜欢就遵循。

这里举一个常见的 api 接口设计

常见的 CRUD 操作

代码语言:javascript复制
POST /user/list // 获取列表
POST /user/get // 获取用户
POST /user/add // 添加用户
POST /user/edit // 编辑用户
POST /user/delete // 删除用户

与之对应 Restful Api 风格

代码语言:javascript复制
GET / user // 获取列表
GET / user / { id } // 获取用户
POST / user // 添加用户
PUT / user / { id } // 编辑用户
DELETE / user / { id } // 删除用户

// {id} 通过后端路由 参数Params可以获取到

可以看到 Restful 风格相比于正常的 POST 而言,少了请求的路径,而同时使用请求方法字段(GET,POST,PUT,DELETE) 要与之表明的意思也很明确(前提:在增删改查的时候),也就只是增删改查而已。

我何时使用 Restful​

这里我要说说我个人使用情况下,如果单单只是增删改查的话,我会使用 Restful 风格,好用是一方面,不必在修改数据的还要在 body 中添加 id 这个字段。其次 restful 确实也算广泛,但也仅仅只是在增删改查中。

实际业务中复杂情况太多了,有的时候仅仅这四个请求方法不能很明确的表达所要的意思,例如下面一些业务逻辑

代码语言:javascript复制
POST user/login  发送登录请求

POST user/register  发送注册请求

POST user/info 获取个人信息

POST user/forget 忘记个人密码

POST user/getCode  获取验证码

此外还有充值,获取消费记录、登录记录等等就不一一列举了,总之这时候我毫不犹豫会使用 POST,可能有人会好奇,为啥获取信息和获取验证码的时候要使用 POST 请求,用 GET 不好吗?好,但后文会说为什么。

易猜测 api 接口​

实际上,采用了 Restful 风格,几乎一猜就能猜到对应的 api。比如商品管理,无非就是获取商品列表,添加商品,编辑商品,删除商品。同时又传入的是对应的 ID,这要是 Mysql,ID 基本都是按顺序的,万一 api 鉴权没做好,都不知道数据怎么变动的。当然这种情况一般都是比较少见的了。

不易加密​

上文不是说到为啥都要使用 POST 请求,原因也挺简单的,就是加密,GET 请求一般都不会携带过多参数,针对数据效验的话最多也就一个 MD5 效验,然而是远远不够的,而 POST 所能携带的数据不仅仅是 MD5 效验,还能携带风控算法,二次效验,浏览器指纹算法等等,能保证一定的防破解性。一些看似用 GET 请求方便的接口,但实际都要考虑所包含的风险,就如上面那个发送验证码的接口,如果不加以加密,特别容易仿造出与之对应的协议请求,再次仿造发送也不难。当然,对于这种限制类的业务,还是得要后端进行限制,例如 1 分钟只能发送一条,一天一号只能发送 10 条。

最后​

其实可以发现绝大多数的网站基本上都不是采用 Restful 风格(貌似用的最多的也就是管理系统了),因为所涉及的业务逻辑实在是太复杂了,不单单只能使用请求方法来表明意思,有时候 Url 路径更能表达明确意思。

Restful 风格想的太美好了,然而实际业务中 很多时候并不能单纯的通过 get post put delete 这四种请求发送来表明真实意义,所以我在增删改查的时候才会使用 Restful api 风格。

在我写项目中遇到一些复杂业务逻辑,我是毫不犹豫使用 Post 请求的,然后通过 url 路径表明 api 所要请求的路径,同时编写 Swagger Api 文档。什么样的风格都因人而异,主要自己用的习惯就行,毕竟 api 接口只是风格,并不作为标准来衡量。

0 人点赞