开发接口时,有一种情况很容易被忽略:API返回成功,不代表整个业务流程已经完成。
例如,程序调用发送消息接口后收到了成功响应,但后续业务记录没有更新,或者任务状态一直停留在处理中。
这通常和业务状态管理有关。
不要只看接口返回值
接口调用成功,只能说明当前请求获得了成功响应。具体代表什么,需要结合接口文档和返回内容判断。
建议把业务状态分开记录:
-
待处理:任务已经创建,尚未执行。
-
处理中:请求正在执行。
-
成功:满足业务定义的成功条件。
-
失败:请求或业务处理失败。
-
待确认:请求超时,暂时无法确定是否执行成功。
特别是请求超时的情况,不要直接把任务标记为失败并立即重新执行,否则可能产生重复操作。
业务状态应该怎么更新?
可以使用下面的处理方式:
try:
result = call_api()
if is_success(result):
update_status("success")
else:
update_status("failed")
except TimeoutError:
update_status("pending_confirm")
这里的 call_api()、is_success() 和 update_status() 是示意函数,实际代码需要根据使用的接口和业务系统实现。
最后,日志也不能少
建议至少记录任务ID、请求时间、接口返回结果、错误信息和业务状态。
排查问题时,就能区分是请求没有发出、接口调用失败,还是接口已经执行但业务记录没有同步。
接口调用、业务执行、状态更新是三个不同环节。 把它们分开记录,比单纯判断一个成功或失败的返回值更容易定位问题。