接口设计的十八条规范

目录

  • 1.签名
  • 2.加密
  • 3.IP白名单
  • 4.限流
  • 5.参数校验
  • 6.统一返回值
  • 7.统一封装异常
  • 8.请求日志
  • 9.幂等设计
  • 10.限制记录条数
  • 11.压测
  • 12.异步处理
  • 13.数据脱敏
  • 14.完整的接口文档
  • 15.请求方式
  • 16.请求头
  • 17.批量操作
  • 18.职责单一


1.签名

目的:防止数据被篡改。

方法:

  1. 接口请求方将请求参数、时间戳和密钥拼接成一个字符串;
  2. 使用MD5等hash算法生成签名(sign);
  3. 在请求参数或请求头中增加sign参数传递给API接口;
  4. API接口网关服务验证传递的 sign 值,与自己生成的 sign 值对比,若相等则认为是有效请求。

时间戳的作用:防止同一次请求被反复利用,增加密钥被破解的可能性,每次请求设置合理的过期时间(如:15分钟)。


2.加密

目的:保护重要数据(如:密码、银行卡号等)。

方法:

  1. 使用AES对称加密算法;
  2. 在前端使用公钥加密用户密码;
  3. 在注册接口中使用密钥解密并做相关校验;

3.IP白名单

目的:防止恶意请求。

方法:

  1. 限制请求IP;
  2. 添加IP白名单在API网关服务上;
  3. 防止内部服务器被攻破,需增加 web 防火墙。

4.限流

目的:防止API接口被频繁调用导致服务不可用。

方法:

  1. 对请求IP、请求接口、请求用户做限流;
  2. 使用Nginx、Redis或Gateway 实现限流功能。

5.参数校验

目的:拦截无效请求,保护系统资源。

方法:

  1. 校验字段是否为空、字段类型、字段长度、枚举值等;
  2. 使用Hibernate Validator框架进行校验,如:@Null、@NotEmpty、@Size、@Max、@Min等。

6.统一返回值

目的:避免返回值结构不统一,便于接口维护。

方法:

  1. 返回异常通过API网关捕获并转换成统一的异常结构返回。

7.统一封装异常

目的:防止泄露敏感信息。

方法:

{"code":1000,"message":"服务器内部错误","data":null
}

8.请求日志

目的:便于快速分析和定位问题。

方法:

  1. 记录请求URL、参数、头信息、请求方式、响应数据和响应时间等;
  2. 使用traceId串联整个请求的日志。

9.幂等设计

目的:防止多次请求产生错误数据。

方法:

  1. 使用数据库唯一索引或Redis保存requestId和请求参数来保证幂等性。

10.限制记录条数

目的:避免接口超时问题。

方法:

  1. 限制批量接口请求的数量(如最多1000条记录);
  2. 超过限制直接提示用户。

11.压测

目的:了解各接口的QPS情况,确保上线后的稳定性。

方法:

  1. 使用 jmeter 或 apache bench 进行压力测试。

12.异步处理

目的:提升复杂业务逻辑的接口性能。

方法:

  1. 接口发送MQ 消息后立即返回成功,消息由 MQ 消费者异步处理。

13.数据脱敏

目的:保护敏感数据,防止隐私泄露。

方法:

  1. 返回数据中部分内容用星号代替(如用户手机号显示为182****887).

14.完整的接口文档

目的:减少沟通成本,方便对接。

方法:

  1. 接口地址、请求方式、请求参数和字段介绍、返回值和字段介绍、返回码和错误信息、加密或签名示例、请求demo等。

15.请求方式

方法:

  1. 根据实际情况选择合适的请求方式(如GET、POST等)。

16.请求头

方法:

  1. 将公共功能参数,如权限验证、traceId参数放入Header请求头中,使用统一拦截器解析。

17.批量操作

目的:满足更多业务场景需求。

方法:

  1. 设计支持批量操作的接口,避免单个操作导致效率低下。

18.职责单一

目的:降低接口维护成本。

方法:

  1. 接口设计应职责单一,避免复杂的 if…else 判断。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/15801.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

概率论统计——大数定律

大数定律 弱大数定律(辛钦大数定律) 利用切比雪夫不等式,证明弱大数定律 应用 伯努利大数定理,(辛钦大数定理的推论) 证明伯努利大数定理 注意:这里将二项分布转化成0,1分布来表示,…

按月爬取天气数据可视化展示

从天气网分析,可以查询每个月的天气情况,这里按照url规则,传入年月,获取数据,最后进行可视化展示,最终效果: 下面是获取过程: 第一步: import requestsdef get_weather(month):url = f"https://lishi.tianqi.com/nanning/{month}.html"response = reques…

从0开始学统计-多个婴儿连续夭折是谋杀吗?

1.什么是小概率事件? 小概率事件是指在一次随机试验中发生概率非常低的事件。一般来说,小概率事件的发生概率远低于一定的阈值,通常取0.05或0.01。在统计学中,这些阈值被称为显著性水平(significance level&#xff0…

LeetCode 热题 100 介绍

"LeetCode热题100"通常是指LeetCode上被用户频繁练习和讨论的100道热门题目。这些题目往往对于面试准备和算法学习非常有帮助。 哈希 两数之和 难度:简单链接🔗: 这 字母异位词分组 难度:中等链接🔗&#x…

题解:CF1016E Rest In The Shades

题意 平面上有一个点光源 s s s 并以每秒 1 1 1 单位长度的速度从点 ( a , s y ) (a,sy) (a,sy) 移动到点 ( b , s y ) (b,sy) (b,sy)&#xff0c;其中 s y < 0 sy<0 sy<0&#xff1b;在 x x x 轴正方向上有 n n n 不相交、不接触的挡板&#xff0c;第 i i i …

springboot项目跨域设置总结

方式一&#xff1a; Configuration public class CorsConfig implements WebMvcConfigurer {Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**") // 允许跨域的路径.allowedOrigins("*") // 允许跨域请求的域名.al…

高校电动自行车充电桩管理系统-手把手调试搭建

高校电动自行车充电桩管理系统-手把手调试搭建 高校电动自行车充电桩管理系统-手把手调试搭建

【Spring Boot】响应式编程

响应式编程 1.WebFlux2.比较 MVC 和 WebFlux2.1 工作方式2.2 Spring MVC 与 Spring WebFlux 的区别2.3 使用 WebFlux 的好处 3.Mono 和 Flux3.1 Mono 和 Flux 是什么3.2 Mono 和 Flux 的区别 4.开发 WebFlux 的流程4.1 注解式开发流程4.2 响应式开发流程 5.用注解式开发实现 He…

SD3314A降压恒流LED驱动器电压降压2.5V-6.0V标准电源

该SD3314A是一个降压恒流LED驱动器。当输入电压降到低于LED正 向电压时&#xff0c;则SD3314A进入LDO模式运行 该SD3314A支持的输入电压范围从2.5V至6.0V&#xff0c;允许使用一个单一 的锂/锂聚合物电池&#xff0c;3AA或4AA电池&#xff0c;USB和其他标准电源 FB电压仅为0.1V…

基于开源ATmega8 无感BLDC程序移植到ATmega328PB

基于开源ATmega8 无感BLDC程序移植到ATmega328PB &#x1f516;基于Atmel Studio 7.0开发环境。&#x1f955;开源原项目资源地址&#xff1a;https://svn.mikrokopter.de/websvn/listing.php?repnameBL-Ctrl&path%2F&&#x1f4cd;原理图和PCB资源 BL-Ctrl v2.0 in E…

Win32 API

个人主页&#xff1a;星纭-CSDN博客 系列文章专栏 : C语言 踏上取经路&#xff0c;比抵达灵山更重要&#xff01;一起努力一起进步&#xff01; 一.Win32 API 1.Win32 API介绍 Windows这个多作业系统除了协调应⽤程序的执⾏、分配内存、管理资源之外&#xff0c;它同时也是…

JAVA给一个JSON数组添加对象

操作Mysql表的json字段&#xff0c;查询json字段的内容&#xff0c;将新增的内容添加到查询的json数组中 String a "[{\"name\": \"张三\", \"age\": 10, \"gender\": \"男\", \"email\": \"123qq.co…

Redis内存回收-内存淘汰策略

LFU的访问次数之所以叫做逻辑访问次数&#xff0c;是因为并不是每次key被访问都计数&#xff0c;而是通过运算&#xff1a; 生成0~1之间的随机数R计算 (旧次数 * lfu_log_factor 1)&#xff0c;记录为P如果 R < P &#xff0c;则计数器 1&#xff0c;且最大不超过255访问…

【华为OD机试-C卷D卷-200分】二叉树的广度优先遍历(C++/Java/Python)

【华为OD机试】-(A卷+B卷+C卷+D卷)-2024真题合集目录 【华为OD机试】-(C卷+D卷)-2024最新真题目录 题目描述 有一棵二叉树,每个节点由一个大写字母标识(最多26个节点)。 现有两组字母,分别表示后序遍历(左孩子->右孩子->父节点)和中序遍历(左孩子->父节点-&…

9.任务调度

一、开启任务调度器 1.函数 vTaskStartScheduler() 函数 vTaskStartScheduler()用于启动任务调度器&#xff0c;任务调度器启动后&#xff0c;FreeRTOS 便会开始 进行任务调度&#xff0c;除非调用函数 xTaskEndScheduler()停止任务调度器&#xff0c;否则不会再返回。函数 vTa…

Oracle数据库中的Freelist解析

Freelist&#xff08;自由列表&#xff09;是Oracle数据库中用于管理段&#xff08;如表或索引段&#xff09;空间的一种机制&#xff0c;尤其在使用手动段空间管理&#xff08;MSSM&#xff09;的表空间中尤为重要。Freelist的主要职责是跟踪和分配段内位于高水位标记&#xf…

JVM何时GC

何时进行GC 垃圾回收&#xff08;GC&#xff09;主要分为两类&#xff1a;Minor GC&#xff08;也称Young GC&#xff09;和Full GC&#xff08;或Major GC&#xff09;**&#xff0c;主要依据内存使用情况和对象生命周期进行触发。 Minor GC主要针对**年轻代&#xff08;You…

Centos修改系統語言

一、使用命令行修系统语言 1、显示系统当前语言环 [rootkvm-suma ~]# localectl System Locale: LANGen_US.utf8 VC Keymap: cn X11 Layout: cn 2、查看系统支持字符集 [rootkvm-suma ~]# locale -a 2、设置系统语言环境 [rootkvm-suma ~]# localectl set-locale LANGz…

【CMake】CMake入门(三)常见的cmake脚本指令 日志输出 CMake内置的变量

本篇文章不是新手入门教学文章&#xff0c;主要是记录笔者个人的学习笔记 CMake入门&#xff08;三&#xff09; 一、CMake中的脚本指令1. 设置CMake最低版本要求2、指定项目名称3、添加生成的可执行文件4、添加生成库文件5、搜索文件6、生成文件7、添加子目录8、添加头文件的搜…