【发布时间】:2018-12-12 19:33:04
【问题描述】:
您应该如何处理通过 webhook 接收的事件可以按随机顺序接收的事实?
例如,给定以下有序事件:
- A:invoiceitem.created(数量为 1)
- B:invoiceitem.updated(数量从 1 到 3)
- C:invoiceitem.updated(数量从 3 变为 2)
您如何确保接收 C-A-B 不会导致数据损坏(即数量为 2 而不是 3)?
如果 Event#data 中的 previous_attributes 与当前状态不对应,您可以拒绝 webhook,但是如果您的本地模型已经更新,您将被卡住,因为您永远不会发现自己处于webhook 期望的状态。
或者您可以使用将任何 webhook 视为检索和更新对象的提示。您只需忽略 webhook 发送的数据并始终检索它。 即使您收到按更新/删除/创建排序的事件,它也应该可以工作,因为更新实际上会创建对象,删除会删除它,而创建将无法检索对象并且什么也不做。 但是,当 webhook 将数据作为事件数据提供时,每次检索数据感觉就像是在浪费资源。
这个问题是asked before,但答案不包括上述解决方案。
谢谢
【问题讨论】:
-
我会选择后者。使用事件知道我应该获取对象的最新状态并信任该最新状态
-
您可能需要考虑将此扩展讨论移至您链接到的现有问题,而不是使用非常相似的原始问题。
-
另外,要考虑的另一种方法是对所有 Stripe webhook 事件使用
created通用字段。您可以为传入的请求实现一个小的保留区域,并按正确的日期顺序处理它们。 -
@dmulter 我做到了。提到该帖子以表明我已完成作业。发布是因为原始问题主体的目标不明确:OP 的最后一个问题是对节点模块的请求。另外,尽管是实际答案,但我对旧问题的答案被忽略了,并且担心作为答案的问题不会引发太多辩论。
标签: api stripe-payments webhooks