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 签名 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 的位置。

在以下节点中,这些概念在更多详细信息中介绍。