默认安全的变更
某些变更本质上是幂等的,因为它们按你提供的稳定标识符进行更新插入。当你使用相同的输入调用这些变更时,结果是相同的 — 没有创建重复项的风险。
- 采用唯一的商户提供标识符的变更(例如,订单
externalId)在重复调用时将返回现有记录,而不是创建一条新记录。 - 只读操作(查询)总是可以安全重试。
当你可以将自己的稳定标识符附加到你正在创建的资源时,优先选择该路径。
非本质上幂等的变更的模式
对于创建不带有商户提供密钥的资源的变更,将它们视为来自你这方的最多一次:
- 在发送前持久化请求。 在网络调用前向你自己的数据库写入一行(状态
pending)。 - 发送变更。 成功时,针对你的待处理行记录返回的资源 ID(状态
committed)。 - 出现网络错误时,不要盲目重试。 查询 Zonos Graph 来确定资源是否已创建(例如,通过列出在过去几分钟内为你的账户创建的资源,或通过查询你可以关联的相关资源)。仅在你能确认资源不存在时才重试。
- 对代表该请求的任何业务键,在你自己的数据库中使用唯一约束,这样来自你自己的应用程序的重复重试就不会重复提交。
Webhook 传递至少一次
当你使用 Zonos webhooks 时,设计处理程序使其幂等 — 同一事件可能被传递多次。按事件 ID 去重。查看 Webhooks 获取事件 ID 字段。
状态
幂等性密钥支持目前不完整。所选的内部重试变更(例如,订单账单重试和退款账单重试流程)已接受幂等性密钥并使用它来去重下游支付处理器调用。Zonos Graph 上的所有面向客户的创建变更中还没有标准化的
idempotencyKey参数;这在规划中。在它发布之前,使用下面的模式来保持变更安全以供重试。