ASP.NET webhook 總覽

Webhook 是輕量 HTTP 模式,提供簡單的 pub/sub 模型,可將 Web Api 和 SaaS 服務連接在一起。 當服務中發生事件時,會以 HTTP POST 要求的形式傳送通知給已註冊的訂閱者。 POST 要求包含事件的相關資訊,讓接收者可以據此採取動作。

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

Microsoft ASP.NET webhook 可讓您更輕鬆地在 ASP.NET 應用程式中傳送和接收 webhook:

  • 在接收端,它會提供從任意數目的 WebHook 提供者接收和處理 Webhook 的一般模型。 除了支援DropboxGitHubBitbucketMailChimpPayPalPusherSalesforce空隙StripeTrelloWordPressZendesk之外,還可以輕鬆地新增支援。

  • 在傳送端,它會提供管理和儲存訂閱的支援,以及將事件通知傳送給適當的訂閱者集合。 這可讓您定義一組訂閱者可以訂閱的事件,並在發生事情時通知他們。

這兩個部分可以根據您的案例一起使用或分開使用。 如果您只需要接收來自其他服務的 Webhook,則可以只使用接收者部分;如果您只想要將 Webhook 公開給其他人使用,那麼您就可以這麼做。

程式碼會以 ASP.NET Web API 2 和 ASP.NET MVC 5 為目標,並在 GitHub 上以 OSS的形式提供。

Webhook 總覽

Webhook 是一種模式,這表示它從服務到服務的使用方式不同,但基本概念相同。 您可以將 Webhook 視為簡單的 pub/sub 模型,讓使用者可以訂閱其他地方發生的事件。 事件通知會傳播為 HTTP POST 要求,其中包含事件本身的相關資訊。

HTTP POST 要求通常包含 JSON 物件或由 WebHook 傳送者所決定的 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 webhook包含具有要求本文雜湊的X 中樞簽章 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 Processing Pipeline

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

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

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

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