Webhook 是我們現代云生態系統中的重要組成部分。 它們用於響應觸發事件將實時數據從一個應用程序饋送到另一個應用程序,並用於各種通知和自動化系統。
網絡鉤子概述
webhooks解決了哪些問題? 例如,假設您在家等待包裹送達。 要知道包裹是否已經到達,你可以起身從你家的門或窗戶往裡看。 如果包裹不在這裡,您可以稍後再回來查看。
在服務器領域,定期檢查新信息的過程稱為投票, 很長一段時間以來,它是兩台機器之間最常用的更新更新通信方法。 輪詢的缺點是為不連續發生的關鍵事件在資源使用和及時性之間找到平衡。 在我們的示例中,您最終會花費大量精力檢查數據包是否在大部分時間到達時沒有顯示任何內容。
Webhooks 擅長企業家,這是一種資源高效的通知方法,它會導致服務器發送通知以通知您新事件。 為了減輕我們送貨的頭痛,您可以讓送貨公司按鈴(也就是發送通知),這樣您只需起床一次:包裹到達時。
雖然 webhooks 非常適合實時監控數據,但它們有一個微妙但重要的缺點。 由於 webhooks 僅在有新信息可用時才起作用,因此出現故障且不對任何更新做出反應的服務看起來與工作正常但沒有消息可發送的服務相同。
為了緩解這種情況,將 webhook 與其他基於輪詢的應用程序編程接口 (API) 工具相結合是可行的方法。 擁有冗餘配置可提高可靠性並讓您享受兩者的好處。 由於 webhook 處理對時間最敏感的更新,因此可以減少輪詢間隔以節省帶寬,同時仍然跟踪任何停機問題。
網絡鉤子機制
Webhook 是由用戶創建的 HTTP 回調。 用戶將創建一個 URL 並將其添加到實現 webhook 的服務中。 當此服務要向您發送信息時,它會向您提供的 URL 發出 HTTP POST 請求。 來自此 POST 請求的數據可以以最適合所傳輸信息的格式發送。 由於其靈活性和廣泛的兼容性,用於此目的的最常用格式是 JSON,儘管在某些情況下首選 XML 或 HTML 格式編碼。
發送的實際數據可以短至幾個字符,例如以下 JSON 片段。
'{"data":"New event detected"}'
重要的是數據以預期的格式發送,並在需要時準確到達。
Webhook 只是 API 中的眾多工具之一。 Webhook 有時被稱為反向 API,假設 API 通過向服務器發送請求然後等待響應(使用我們之前討論的輪詢過程)正常工作。 雖然術語“反向 API”可能暗示信息以相反方向流動,但信息仍然從服務流向您。 Webhook 只是另一種實時處理這種信息流的工具。
網絡鉤子示例
讓我們看看一些示例 Webhook 以及您可以使用它們構建的內容。
GitHub
GitHub允許您將 webhook 配置為特定事件的集成。 每當有人將更改推送到您的存儲庫並自動使用它來構建和測試更改時,您可以讓您的其中一台服務器收到通知。 這些建議的更改可以作為持續集成/持續交付或 CI/CD 系統的一部分實施。
郵箱
類似於 GitHub webhooks,郵箱允許您在文件或文件夾發生更改時收到通知,以及進行這些更改的用戶。 這使您可以自動執行發布過程中的許多任務,例如在修改文件後自動將文件轉換為 PDF。
鬆動的
對於可能需要人眼的事物,鬆動的允許您配置在新信息到達時發佈到特定頻道的 webhook。 這對於警報和監控系統或其他需要立即關注的事件特別有用。
Webhook 集成技巧
這裡有一些提示,可讓您有效地集成 webhook。
快速回答
webhooks 的主要優點是它們可以實時傳輸信息,因此請務必盡快確認您是否收到了 webhook 請求。 如果接收到的數據需要深度處理,可以考慮使用單獨的隊列或線程。
正確處理錯誤
如果傳輸的數據出現問題,生成錯誤代碼對於確保再次發送丟失的更新至關重要。 即使您單獨處理接收到的數據,您也可以事先分析此信息以確保其有效(也稱為健全性檢查)。
監控負載
每次事件發生時 Webhook 通知都會到達,因此可能會收到比您的服務器在短時間內處理的更多的警報。 大多數服務允許您設置速度限制以避免此問題。 相反,其他一些將需要您仔細優化您的系統才能繼續照常接收通知。
保護您的連接
使用 SSL 證書在數據傳輸時對其進行加密已經是標準做法,但由於 webhook URL 將偵聽任何傳入請求,未經授權的參與者可能會嘗試向該 webhook 發送意外數據。 為防止這種情況,大多數服務在每個請求中都包含一個秘密身份驗證令牌,它的作用類似於密碼,以確保該請求是您真正想要接收的請求。
測試 webhook 的技巧
大多數在其 API 中提供 webhook 接口的服務也有大量關於如何使用它的文檔。 熟悉如何瀏覽文檔以及如何使用它提供的示例是開發 Web 應用程序和服務的一項關鍵技能。 你可以從液體網絡 API,它允許您自動執行大部分可以在帳戶控制面板中手動執行的操作。 實踐遠超理論,所以直接觀察webhooks的行為對開發非常有用。
偶爾查看流量有助於更好地了解數據的組織方式。 GitHub 等一些服務將允許您查看完整內容並響應過去的請求。 如果此功能在其他服務上不可用,您可以使用第三方工具,例如裙子捕獲和查看此數據。
您可以使用 cURL 來模仿服務的行為並將數據粘貼到新的 webhook 請求中以進行實時測試。 此方法對於排除可能不經常發生的邊緣情況非常有用。
在以下示例中,讓我們看一下使用 cURL 向在 Slack 中創建的 webhook URL 發出的非常基本的 webhook 請求,具有以下選項:
- -X 指定請求類型(POST)。
- -H 包含一個標頭,它指定內容類型(在本例中為 JSON 數據)。
- --data 發送實際數據,即文本“Hello world!”
我們可以看到服務器響應了好的如果我們檢查創建此應用程序的鬆弛通道,我們可以看到通知成功。
結論
Webhooks 是一種工具,可讓您通過常規 HTTP 請求接收有關事件或通知的更新,而無需花費資源進行持續狀態更新。 它們是許多自動執行重要任務的不同系統中簡單但功能強大的構建塊。
您準備好開始創建自己的自動化解決方案來滿足您的所有業務需求了嗎? 使用我們的小型、經濟實惠、完全託管的 VPS 之一開始測試,或聯繫我們的解決方案專家之一來幫助設計您的基礎架構。