.net - 为批量操作实现网络 Hook

标签 .net rest asp.net-web-api webhooks

我希望实现 web hooks作为应用程序 REST API 的一部分。

最初,我们希望实现一种机制,供 API 使用者注册实体更新事件。因此,如果一个实体发生变化,我们将调用所有已为该实体的变化事件注册的 webhook(并且作为注册过程的一部分,API 消费者可以包含额外的过滤条件以确保他们只接收他们感兴趣的实体子集的回调中)。

现在 - 这对于用户发起的更改非常有效,这些更改会慢慢渗透,但我担心在发生大量更改时如何最好地处理这个问题 - 例如作为在 UI 中执行的批量操作的一部分,或者来自 API 使用者的大量更改。

到目前为止我考虑过:

  • 只是为每个实体执行回调,使用某种异步池 - 我在这里看到的问题是规模,并可能对那些订阅网络 Hook 的应用程序造成损害。
  • 将每个 webhook 注册的更改记录排队,比如 10 秒的窗口,然后将单个 webhook 通知推送到订阅,并列出受影响的实体 - 我在这里看到的问题是我们在操作之间引入了不必要的延迟和 webhook,当事件刚刚开始时 - 这也会带来一些开销和复杂性,尤其是在网络场场景中实现它时。
  • 实际上将批量操作公开为网络 Hook - 因此如果执行批量删除,消费者将订阅它。因此,为单个实体更改设置 Hook 不会收到任何实体更改事件以进行批量更新/删除等 - 他们必须通过批量操作网络 Hook 来处理此问题。

作为一些额外的细节 - 此应用程序中的批量操作可能包含 10 到大约 100,000 个实体之间的任何地方。

是否有人为批量操作实现了网络 Hook ,这可以阐明他们是如何决定实现的?

最佳答案

我们最近实现了网络 Hook 作为我们的休息 API 的一部分,我们主要关注的是批量操作。在我们的例子中,它是批量导入,用户可以通过我们的网络应用程序导入 excel 或 csv 文件中的记录。

我们的导入流程的设计方式是整个流程在事务中运行。因此,如果它失败了,我们只需回滚而不做任何事情,如果它成功完成,我们会向订阅的客户端发送一个网络 Hook 通知,其中包含一个包含受影响实体信息的巨大主体。

现在我不确定批量操作是如何在您的应用程序中进行的。如果它在交易中,那么你就没有问题。否则我建议将单个和批量操作网络 Hook 分开。我想这是使用 webhooks 的缺点之一,你可以通过背靠背的 POST 请求来降低你的订阅者。

关于.net - 为批量操作实现网络 Hook ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12493372/

相关文章:

c# - 最佳实践 : action enum usage for events

rest - 获取有关币安 API 交易佣金的信息

rest - 如何从 PowerShell 中的请求中获取 StatusCode

java - 使用通用参数使用 REST 服务

c# - 如何通过 Web Api Controller 返回一个 JSON 格式的字符串,而不在响应中显示转义字符

c# - 当文本框值作为事件更改时自动按输入 C#

c# - 将 IL 转换为 C# 代码

android - HttpUrlConnection 未联系服务器

c# - 如何转换时间格式?

asp.net-mvc - Web API 模型绑定(bind)与 Multipart formdata