钩子Hooks和回调Callback,是指在执行一系列操作过程中,触发了某个条件,会去执行某项操作。
如在GORM中,想要在执行查询后,上报一下执行的时间,则可以
1 | db.Callback().Query().After("gorm:query").Register("endRead", completeRead) |
其中endRead为自定义的事件名称,completeRead为自定义的触发时要执行的方法
(在GROM中,Hooks仅针对当前场景有效,Callback则针对全局有效)
在日志库 github.com/sirupsen/logrus,redis go客户端[github.com/go-redis/redis/v8]等库中,也都支持钩子/回调
Webhook大致与hook类似,一般称为反向 API。 和传统的 客户端请求,服务器响应相比,客户端提供一个URL,在事件发生时,服务端会向这个配置好的 URL 发送一条信息。 即与请求-响应不同,使用 Webhook 你可以实时接受到变化 (原本是主动拉取,现在是被动被push; 印象里支付宝/微信支付等都有类似功能,要求你提供一个接口,支付成功后向该接口push信息)
在github/gitlab/gitee中,WebHook 用于在项目发生相关事件时通知外部服务器
(与监听事件、触发器之类的东西类似)
我写完一篇新博客,执行make之后,代码会自动构建并push到github的对应仓库(详见Makefile书写小结).
但还需要登录服务器,手动git push一下 (为提升速度,没有使用github的pages功能)。
之前有通过脚本,在完成push后自动登录服务器,切换到项目目录进行git push
1 |
|
但每次换电脑,需要将公钥上传服务器; 再加上项目目录也有改变。 这两种场景下均需要去修改脚本。
有没有更好的方式呢? 当探测到有新的push,服务器主动去pull代码? (其实未必比上面通过脚本的方式好…此处只为试一下webhook这个功能)
github提供了这样的hooks。我提供一个接口,每当有push事件时,这个hooks会去请求所提供的接口。
该接口收到请求,执行方法(切换到项目目录,执行git pull)
提供一个接口,代码如下:
1 |
另外:
如果用gitee, 还可以集成进钉钉/企业微信/飞书/slack, 无需自己提供接口
以飞书为例,
当有事件发生时,
参考:
原文链接: https://dashen.tech/2017/08/16/WebHook及其在github中的使用/
版权声明: 转载请注明出处.