共用方式為


ASP.NET WebHooks 概觀

Webhooks 是一種輕量型 HTTP 模式,提供簡單的發佈/訂閱模型將 Web API 和 SaaS 服務編寫在一起。 當服務中發生事件時,通知會以 HTTP POST 要求的形式傳送給已註冊的訂閱者。 POST 要求包含事件的相關資訊,讓接收者能夠據以採取行動。

由於其簡單性,WebHook 已經由大量服務公開,包括 DropboxGitHubBitbucketMailChimpPayPalSlackStripeTrello 等等。 例如,WebHook 可以指出 Dropbox 中的檔案已變更,或 GitHub 中已認可程式碼變更,或在 PayPal 中已起始付款,或在 Trello 中已建立卡片。 有無限多的可能性!

Microsoft ASP.NET WebHooks 可讓您更輕鬆地在 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 要求。

WebHook 處理管線

對於傳入的 WebHook,Microsoft ASP.NET WebHook 處理管線看起來像這樣:

ASP.NET WebHooks 處理管線

這裡的兩個主要概念是接收者處理常式

  • 接收者負責處理來自指定傳送者的特定 WebHook 類別,並強制執行安全性檢查,以確保 WebHook 要求確實來自預定的傳送者。

  • 處理常式通常是使用者程式碼執行處理特定 WebHook 的位置。

在下列節點中,詳細說明了這些概念。