我一直在开发一个需要记录信用卡交易的应用程序,该交易依赖于使用外部 API。在我的应用程序中,我有一个包含总金额的发票的概念,以及在信用卡成功付款后从总金额中扣除的交易。
这更像是一个独立于平台的问题,但我正在使用 Django、Python 和 MySQL。
我的问题主要围绕在处理外部 API 时使用事务以及如何设计软件来处理潜在故障。Django 和 MySQL 都支持事务,所以这本身不是问题,但假设以下场景:
- 通过支付 API 提交的信用卡
- 信用卡已成功处理
- 然后,此响应将作为该发票上的付款记录到数据库中
- 出于某种原因将付款保存到数据库时出错
你现在做什么?
如果不涉及 API 调用,答案将很明确,回滚数据库事务并引发错误。但是调用外部 API 会使事情变得复杂,因为这并不是真正回滚外部 API 调用的方法。
我很感兴趣是否有人遇到过这个问题(对于信用卡或类似类型的交易)以及他们如何解决这个问题,或者在这种情况下通常采用一些软件设计方法。