webhook是在特定情况下触发的一种api(回调),用于在项目发生相关事件时通知外部服务器。这些回调由第三方的用户、开发人员自己定义、维护、管理,就好像允许别人挂载一条网线到你的Web网站或者应用程序的钩子上,来实时地收到你的推送信息
比方说我的网站有一个api http://dev.lovelucy.info/incoming
,负责接受一个 Post 请求。每次有push 事件时 GitHub 都会主动往这个地址发送一个 POST 请求。当然 GitHub 还有个 Secret 的设定,就是一个字符串,如果加上的话就在 POST 请求的 HTTP 头中会带一个 Hash 值做验证密文,证明这个 POST 真是来自 GitHub。
再比方,在js中,target.addEventListener(type, listener[, options]);
可以为一个节点添加一个事件,如:
document.getElementById("myBtn").addEventListener("click", function(){
document.getElementById("demo").innerHTML = "Hello World";
});
在点击myBtn按钮时候,会触发点击事件。同理webhook也是如此,在git操作中使用频繁。Github 和 Gitee 支持用户自定义 Web Hook
,下图:
Webhook 处理管道:
其中 DropBox、PayPal、Github、Slack都是第三方平台,这些平台接受到某些 HTTP 请求后,触发 Web Hook 发送新的 HTTP 请求到 Your Web Site, Your Web Site 收到来自第三方平台的 HTTP 请求后再进行自己的业务处理
例子:我的系统属于后台接口系统。每次我开发提交完git仓库后要实时的部署到测试环境,这时候就可以用到gitlab或github的web hooks进行自动更新部署。当我push代码后,触发 gitlab/github 的 web hook 发送 post 请求到我的后台接口系统,后台接口系统接收到该 post 请求后就开始进行更新部署。
参考: