1. 什么是 Webhook摹闽?
Webhook 是一個(gè) API 概念,是微服務(wù) API 的使用范式之一倘屹,也被成為反向 API纽匙,即前端不主動(dòng)發(fā)送請求拍谐,完全由后端推送轩拨;舉個(gè)常用例子晕翠,比如你的好友發(fā)了一條朋友圈淋肾,后端將這條消息推送給所有其他好友的客戶端樊卓,就是 Webhook 的典型場景杠河。
簡單來說唾戚,Webhook 就是一個(gè)接收 HTTP POST(或GET颈走,PUT立由,DELETE)的URL序厉,一個(gè)實(shí)現(xiàn)了 Webhook 的 API 提供商就是在當(dāng)事件發(fā)生的時(shí)候會(huì)向這個(gè)配置好的 URL 發(fā)送一條信息道盏,與請求-響應(yīng)式不同荷逞,使用 Webhook 你可以實(shí)時(shí)接受到變化种远。
這又是一種對 客戶機(jī)-服務(wù)器
模式的逆轉(zhuǎn)坠敷,在傳統(tǒng)方法中膝迎,客戶端從服務(wù)器請求數(shù)據(jù),然后服務(wù)器提供給客戶端數(shù)據(jù)(客戶端是在拉數(shù)據(jù))掂恕,在 Webhook 范式下懊亡,服務(wù)器更新所需提供的資源店枣,然后自動(dòng)將其作為更新發(fā)送到客戶端(服務(wù)器是在推數(shù)據(jù))鸯两,客戶端不是請求者钧唐,而是被動(dòng)接收方钝侠;這種控制關(guān)系的反轉(zhuǎn)可以用來促進(jìn)許多原本需要在遠(yuǎn)程服務(wù)器上進(jìn)行更復(fù)雜的請求和不斷的輪詢的通信請求里初;通過簡單地接收資源而不是直接發(fā)送請求双妨,我們可以更新遠(yuǎn)程代碼庫叮阅,輕松地分配資源挑随,甚至將其集成到現(xiàn)有系統(tǒng)中來根據(jù) API 的需要來更新端點(diǎn)和相關(guān)數(shù)據(jù)镀裤,唯一的缺點(diǎn)是初始建立困難暑劝。
2. 主要用途
更新客戶端担猛,在資源新建或者更新時(shí)提供更新的傅联、指定的數(shù)據(jù)蒸走。
3. 常見 Webhook 使用場景
對于第三方平臺驗(yàn)權(quán)比驻、登陸等 沒有前端界面做中轉(zhuǎn)的場景,或者強(qiáng)安全要求的支付場景等掸掸,適合用 Webhook 做數(shù)據(jù)主動(dòng)推送堤撵,說白了就是在前端無從參與粒督,或者因?yàn)榍岸税踩珕栴}不適合參與時(shí),就是 Webhook 的場景闰挡;很顯然 Webhook 也不是 Http 的替代品长酗,不過的確是一種新的前后端交互方式桐绒。
如果客戶端要長期監(jiān)聽某個(gè)任務(wù)的狀態(tài)咧叭,按照正常的 API 調(diào)用的方式去做菲茬,那么必須不停得輪訓(xùn)服務(wù)器來獲取當(dāng)前狀態(tài)婉弹;使用 Webhook 則無需輪訓(xùn)镀赌,通過 API 可以確定是否發(fā)生了更改际跪,如果更改了只需要等待服務(wù)器推送信息過來威彰,然后客戶端更新就可以歇盼;git webhook其實(shí)也是這方面的應(yīng)用评抚。
4. 使用說明
Webhook 通過請求發(fā)送數(shù)據(jù)到你的應(yīng)用后邢笙,就不再關(guān)注這些數(shù)據(jù)叮雳;也就是說如果你的應(yīng)用存在問題帘不,數(shù)據(jù)會(huì)丟失寞焙,許多 Webhook 會(huì)處理回應(yīng)捣郊,如果程序出現(xiàn)錯(cuò)誤會(huì)重傳數(shù)據(jù);如果你的應(yīng)用處理這個(gè)請求并且依然返回一個(gè)錯(cuò)誤,你的應(yīng)用就會(huì)收到重復(fù)數(shù)據(jù)僧凤。
Webhook 可能會(huì)發(fā)出大量的請求躯保,這樣會(huì)造成你的應(yīng)用阻塞验懊,確保你的應(yīng)用能處理這些請求义图。