調用三方服務為什么要使用 Webhook?
今天來聊聊 Webhook。
Webhook 是 "用戶定義的 HTTP 回調"。它們通常有以下幾個特點:
- 由事件觸發,例如支付完成事件。
- 回調地址由用戶配置。
下圖顯示了輪詢方式和 webhook 方式的比較。
圖片
假設我們運營一個電子商務網站。用戶通過 API 網關向訂單服務發送訂單,訂單服務轉到支付服務進行支付。然后,支付服務與外部支付服務提供商(PSP)進行對話以完成真正的支付交易。
我們有兩種方法可以處理與外部 PSP 的通信。
短輪詢
向 PSP 發送支付請求后,支付服務會不斷向 PSP 詢問支付狀態。經過幾輪后,PSP 最終返回付款狀態。
短輪詢有兩個缺點:
- 持續輪詢狀態需要支付服務的資源。
- 外部服務直接與支付服務通信,可能造成安全漏洞。
Webhook
我們可以向外部服務注冊一個 Webhook。當有關于請求的最新狀態更新時,請回調某個 URL。當 PSP 完成處理后,它會調用 HTTP 請求來更新付款狀態。
這樣,編程模式就改變了,支付服務就不再需要浪費資源來輪詢支付狀態了。
如果 PSP 從未回調怎么辦?我們可以設置一個 housekeeping 任務,每小時檢查一次付款狀態。
Webhook 通常被稱為反向 API 或推送 API,因為服務器會向客戶端發送 HTTP 請求。
使用 Webhook 時,我們需要注意以下三點:
- 我們需要設計一個適當的 API 供外部服務調用。
- 出于安全考慮,我們需要在 API 網關中設置適當的規則,比如白名單設置,限流等。
- 我們需要在外部服務中注冊正確的 URL。