與傳統系統(其中一個系統(主體)不斷輪詢另一個系統(觀察者)獲取某些數據)不同,Webhooks 允許觀察者在事件發生時自動將數據推送到主體的系統中。
這消除了對象持續監控的需要。 Webhook 完全在 Internet 上運行,因此系統之間的所有通信都必須以 HTTP 消息的形式進行。
Webhook 依賴於指向主體系統中 API 的靜態 URL,當觀察者係統中發生事件時需要通知這些 API。 一個例子是一個網絡應用程序,旨在收集和管理用戶亞馬遜帳戶上的所有訂單。 在此場景中,Amazon 充當觀察者,Custom Order Management Webapp 充當主體。
自定義 Web 應用程序中創建的 Webhook 將允許亞馬遜通過註冊的 URL 自動提交在 Web 應用程序中新創建的訂單,而不是讓自定義 Web 應用程序定期調用 Amazon API 來檢查創建的訂單。 因此,要啟用 Webhooks,主體必須具有指定的 URL 來接受來自觀察者的事件通知。 這減少了對像上的顯著負載,因為僅當事件發生時才在兩方之間進行 HTTP 調用。
一旦觀察者調用主體的 Webhook,主體就可以對新提交的數據採取適當的操作。 通常,Webhook 是通過對特定 URL 發出 POST 請求來完成的。 POST 請求允許您向對象發送附加信息。 此外,它還可以用於識別多種可能的事件,而不是為每個事件創建單獨的 Webhook URL。
要在您的應用程序上實施入站 Webhook,您需要執行以下基本步驟:
Webhooks 和 API 的目標都是在應用程序之間建立通信。 然而,使用 Webhooks 相對於 API 來實現應用程序集成有一些明顯的優點和缺點。
如果以下幾點與已實現的系統更相關,那麼 Webhooks 往往是更好的解決方案:
在某些其他情況下,使用 API 應該優於 Webhook。
在 Webhooks 上使用 API 需要考慮的重要事項是:
為了應對 Webhook 脫機時丟失從服務器發送的數據的可能性,您可以使用事件消息隊列來存檔這些調用。 提供此類功能的平台示例包括 的RabbitMQ o Amazon 的簡單隊列服務 (SQS)。 兩者都被設計為充當中間消息存儲設施,以避免錯過 Webhook 調用的可能性。
Ercole Palmeri