ASP.NET WebHook 概述

WebHook 是一种轻型 HTTP 模式,提供一个简单的发布/订阅模型,用于将 Web API 和 SaaS 服务连接在一起。 当服务中发生事件时,会以 HTTP POST 请求的形式向已注册的订阅者发送通知。 POST 请求包含有关事件的信息,使接收方能够执行相应的操作。

由于 WebHook 的简单性,已由大量服务公开,包括 DropboxGitHubBitbucketMailChimpPayPalSlackStripeTrello 等。 例如,WebHook 可以指示 Dropbox 中的文件已更改、GitHub 中已提交代码更改、PayPal 中发起付款或在 Trello 中创建卡。 可能性是无穷无尽的!

借助 Microsoft ASP.NET WebHook,可以更轻松地将 WebHook 作为 ASP.NET 应用程序的一部分发送和接收 WebHook:

  • 在接收端,它提供了一个通用模型,用于从任意数量的 WebHook 提供程序接收和处理 WebHook。 它现成支持 DropboxGitHubBitbucketMailChimpPayPalPusherSalesforceSlackStripeTrelloWordPressZendesk ,但可以轻松添加对更多支持。

  • 在发送端,它支持管理和存储订阅,以及向正确的订阅者集发送事件通知。 这允许你定义自己的一组事件,订阅者可以订阅这些事件,并在事件发生时通知他们。

这两个部分可以一起使用,也可以根据方案分开使用。 如果只需要从其他服务接收 WebHook,则可以仅使用接收方部件;如果只想公开 WebHook 供其他人使用,则可以执行此操作。

该代码面向 ASP.NET Web API 2 和 ASP.NET MVC 5,在 GitHub 上作为 OSS 提供。

WebHook 概述

WebHook 是一种模式,这意味着它因服务而异,但基本思路是相同的。 可以将 WebHook 视为一个简单的发布/订阅模型,用户可以在其中订阅其他地方发生的事件。 事件通知作为 HTTP POST 请求传播,其中包含有关事件本身的信息。

通常,HTTP POST 请求包含由 WebHook 发送方确定的 JSON 对象或 HTML 表单数据,包括有关导致 WebHook 触发的事件的信息。 例如,由于在特定存储库中打开了新问题, GitHub 中的 WebHook POST 请求正文如下所示:

{
  "action": "opened",
  "issue": {
      "url": "https://api.github.com/repos/octocat/Hello-World/issues/1347",
      "number": 1347,
      ...
  },
  "repository": {
      "id": 1296269,
      "full_name": "octocat/Hello-World",
      "owner": {
          "login": "octocat",
          "id": 1
          ...
      },
      ...
  },
  "sender": {
      "login": "octocat",
      "id": 1,
      ...
  }
}

为了确保 WebHook 确实来自目标发送方,POST 请求以某种方式受到保护,然后由接收方验证。 例如, GitHub WebHooks 包含一个 X-Hub-Signature HTTP 标头,其中包含由接收方实现检查的请求正文哈希,因此无需担心。

WebHook 流通常如下所示:

  • WebHook 发送方公开客户端可以订阅的事件。 这些事件描述对系统的可观测更改,例如,已插入新数据项、进程已完成或其他内容。

  • WebHook 接收方通过注册由四项内容组成的 WebHook 进行订阅:

    1. 应以 HTTP POST 请求的形式发布事件通知的 URI;

    2. 描述应为其触发 WebHook 的特定事件的一组筛选器;

    3. 用于对 HTTP POST 请求进行签名的密钥;

    4. 要包含在 HTTP POST 请求中的其他数据。 例如,它可以是 HTTP POST 请求正文中包含的其他 HTTP 标头字段或属性。

  • 事件发生后,将找到匹配的 WebHook 注册并提交 HTTP POST 请求。 通常,如果由于某种原因收件人未响应或 HTTP POST 请求导致错误响应,则会多次重试 HTTP POST 请求的生成。

WebHooks 处理管道

用于传入 WebHook 的 Microsoft ASP.NET WebHook 处理管道如下所示:

ASP.NET WebHooks 处理管道

此处的两个关键概念是 接收器处理程序

  • 接收方 负责处理来自给定发送方的特定 WebHook 风格,并强制实施安全检查,以确保 WebHook 请求确实来自预期发送方。

  • 处理程序 通常是用户代码运行处理特定 WebHook 的位置。

在以下节点中,更详细地介绍了这些概念。