都可以写好后端接口

在后端工程师的日常开发中,我们都曾想过 怎么设计一个良好的接口呢?需要考虑的点有哪些。来 给您。

1、请求参数校验

这个是大家都能想到的,也是一个良好的接口必备的前提条件,通过入参的校验我们可以过滤掉许多无效的请求,提高系统的稳定性。

我们可以将入参合法性校验分为: 「常规性校验」 和 「业务校验」;

所谓的常规性校验包括:token校验、必填校验、长度校验、类型校验等等;

业务校验也就是特定业务场景下的校验:比如用户商品下单接口,那么下单金额一定要大于0;

2、版本迭代

实际过程中 肯定有需要对版本进行升级的需求,而提前设计好版本,可以避免因为升级导致旧的服务无法正常工作,我们要保证在升级的时候,新旧版本的服务都能正常运转。

多版本控制现在比较常见的方式有:url标识版本, header标识版本, params标识版本3种方式。

3、访问限制

在设计接口的时候,我们要考虑好,哪些是 游客接口,哪些是 登录接口。

在访问 登录接口的时候,我们要做好 验证工作。

比如说 请求头带上这个token请求接口,后端通过拦截器拦截该接口,做校验看redis是否存在该key,如果不存在直接返回,用户未登陆!

4、防抖处理

目的是防止重复数据的产生,比如新增接口,用户快速点击两次,如果没做防重,就会产生重复数据。

5、考虑幂等性

所谓幂等: 「多次调用方法或者接口不会改变业务状态,可以保证重复调用的结果和单次调用的结果一致」。

我们在开发中主要操作也就是CURD,其中读取操作和删除操作是天然幂等的,我们所关心的就是创建操作、更新操作。

比如请求多次,只有第一次请求才会做数据处理,后面的请求不会产生数据改变,例如退款接口,第一次退款成功后,后面的请求,不会再次退款成功。

6、提高响应时间

这是一个 用户体验 的指标,因为涉及的方面很多,所以是一个复杂的操作。

7、限流控制

限流是为了更好的维护 系统稳定性。

如果说我们把接口提供出来给第三方系统用,那么这个时候接口的限流是非常有必要的。

一方面,限流可以防止接口被刷,造成不必要的服务层压力,另一方面,是为了防止接口被滥用。

可以使用 redis进行接口调用次数统计,ip+接口地址作为key,访问次数作为value,每次请求value+1,设置过期时长来限制接口的调用频率。

8、IP黑名单

ip黑名单是 设置不让访问服务的ip,进而对 恶意访问 做一个控制。

9、数据脱敏

数据库中的一些敏感字段比如:身份证号、银行卡号、地址、手机号等等,是需要做脱敏处理。

比如手机号15912345678脱敏后显示159****5678。

10、接口访问日志

关键的 接口一定要有日志,入参日志、出参日志、异常日志,

这样一旦出现问题,我们可以通过查看日志一下子定位问题所在。

11、统一 响应格式

在定义接口时需要返回 统一格式的 响应体。

响应数据会包含三个属性: `

  • 状态码(code)
  • 信息描述(message)
  • 响应数据(data)

客户端可以根据**「状态码」**知道接口请求是否成功,如果成功则开始处理数据,如果失败则直接抛出message信息。

12、职责单一清晰

一个接口只做一件事,是那些开发过大项目的小窍诀。

13、配备一份好的 接口文档

优秀的产品,需要一份优秀的说明书。提供一份良好完整的api文档 是很有必要的。

其中包括提供一些请求示例,这样用户在使用的时候才会更加清楚,也能避免一些错误的请求。

相关推荐
明月_清风13 分钟前
Muse 登顶 App Store 第一,SDK 直接开源:AI Agent 开始进入下一个阶段
人工智能·后端
hsfxuebao3 小时前
Loop Engineering 保姆级教程 + 项目实战
人工智能·后端
打工仔折腾 AI3 小时前
从 Demo 到生产级 Agent:8 个关键设计机制与 Python 实现拆解
java·jvm·人工智能·后端·python·langchain·ai agent 实战
架构技术专栏3 小时前
交叉熵:AI 怎样给概率预测打分
后端
IT_陈寒5 小时前
SpringBoot自动配置坑了我一把,原来是这样绕过去的
前端·人工智能·后端
要努力啊4695 小时前
用 Codex 加速 Java 开发:从代码生成到测试覆盖的完整实战
后端
dora5 小时前
LangChain4j 新手入门实战教程(Java版)
后端·langchain·agent
蜗牛互联网5 小时前
MongoDB Atlas Agent Engine之后,如何用版本门禁防止陈旧写入
java·数据库·人工智能·后端·mongodb
付威20236 小时前
Rust 生命周期:为什么要有它,实际代码里到底怎么用?
后端
海岳云舟6 小时前
spring使用kafka的三种方式(listener、container、stream)
后端