我希望将Web 挂钩作为应用程序 REST API 的一部分来实现。
最初,我们希望为 API 消费者实现一种机制来注册实体更新事件。因此,如果一个实体发生更改,我们会调用所有已为该实体上的更改事件注册的 webhook(作为注册过程的一部分,API 使用者可以包含额外的过滤条件,以确保他们只接收他们感兴趣的实体子集的回调在)。
现在 - 这对于用户发起的更改效果很好,会慢慢渗入,但我担心当大量更改发生时如何最好地处理这个问题 - 例如作为在 UI 中执行的批量操作的一部分,或者API使用者发生的大量变化。
到目前为止,我已经考虑过:
- 只需使用某种异步池为每个实体进行回调 - 我在这里看到的问题是规模并可能对订阅 Web 挂钩的那些应用程序造成损害。
- 排队每个 webhook 注册的更改记录,超过 10 秒的窗口,然后将单个 webhook 通知推送到 subscribe 以及受影响的实体列表 - 我在这里看到的问题是我们在操作和 webhook 之间引入了不必要的延迟,当事件刚刚进入时 - 这也会引入一些开销和复杂性,特别是如果在网络农场场景中实现这一点。
- 实际上将批量操作公开为网络挂钩 - 因此,如果执行批量删除,消费者将订阅它。因此,为单个实体更改设置挂钩不会收到任何用于批量更新/删除等的实体更改事件 - 他们必须通过批量操作 Web 挂钩来处理这个问题。
作为一些额外的细节 - 此应用程序中的批量操作可能包含 10 到大约 100,000 个实体。
有没有人为批量操作实施了网络挂钩,可以阐明他们如何决定实施这一点?