ʕ•ᴥ•ʔ RUNNINGJ

记一次API的BUG

BUG简述

API完成一个相对较重的功能,用户使用API的时候需要扣除相应的权限次数,由于流程设计不合理,导致可能出现「一次权限多次使用」的情况。

第一版的流程如下:

sequenceDiagram
APP->>Server: 提交
Server-->>Server: 权限确认
Note right of Server: 用户可能在此时频繁发起提交请求
Server->>AI Engine: 作文
Note left of AI Engine: 耗时大概3秒
activate AI Engine
AI Engine->>Server: AI结果
Server-->>Server: 存储结果以便用户后续查看
Server-->>Server: 扣除次数
Server-->>APP: 返回结果

错误情况: 用户只有一次权限时,可以在「确认权限」但AI处理的间隙,快速提交多个不同请求,这是仍然够得到结果并存储。产生了一次权限多次使用的情况。

可以有多种方式处理这个问题,需要根据实际情况,选择能解决当下绝大部分问题,又成本较低的方式。

便有了第二版流程:

sequenceDiagram
APP->>Server: 提交
Server-->>Server: 权限确认
Note right of Server: 用户可能在此时频繁发起提交请求
Server->>AI Engine: 作文
Note left of AI Engine: 耗时大概3秒
activate AI Engine
AI Engine->>Server: AI结果
Server-->>Server: 扣除次数,如扣除成功则储存结果
Server-->>APP: 返回

选择此方式的原因:

启发