🏠 首页 攻略 Webhook是什么?不用一直盯着,事件来了自动通知你

Webhook是什么?不用一直盯着,事件来了自动通知你

Webhook是一种事件通知机制,让服务之间自动推送消息,告别轮询浪费资源。GitHub、飞书、钉钉都在用它。

什么是Webhook?

Webhook(谐音"网络钩子")是一种事件驱动的消息推送机制

说人话就是:你告诉别人一个你的网址,一旦发生了某件事,对方就会往这个网址发一条消息。

举个生活中的例子:

轮询(没有Webhook):你每隔5分钟就打开冰箱门看一眼,牛奶洒了没有。浪费时间和力气。

Webhook:你什么都没做,但牛奶洒的那一刻,冰箱自动给你手机发了一条通知。

在技术世界里,这就是核心区别。

Webhook有什么用?

Webhook解决的核心问题是:如何高效地让不同服务之间实时沟通?

常见场景:

  1. 代码提交通知:你把代码推送到GitHub,GitHub自动通知你的构建服务器开始打包。
  2. 支付成功回调:用户付完钱,支付平台自动告诉你"钱到了",你不用再一直问支付平台"付了没"。
  3. 聊天机器人:有人在群里@机器人,飞书/钉钉通过Webhook把消息推送给你自己的服务。
  4. 自动化工作流:用户在你的网站填写了表单,表单服务自动通知你的数据库保存数据。

关键点:Webhook让你不用主动去查,别人发生了就通知你

Webhook怎么用?

基本流程

整个Webhook机制其实就三步:

第一步:注册回调地址

你把自己的服务器地址告诉提供方,比如:

https://yoursite.com/api/webhook/github

告诉GitHub:“我的代码有变化时,往这个地址发消息。”

第二步:提供方发送请求

当触发事件时(有人push代码),GitHub会向你提供的地址发送一个HTTP POST请求。请求体通常包含事件详情,格式一般是JSON:

{
  "event": "push",
  "repository": "my-project",
  "ref": "refs/heads/main",
  "commits": [
    {
      "author": "zhangsan",
      "message": "修复登录bug"
    }
  ]
}

第三步:你的服务器接收并处理

你的服务器收到请求后,解析JSON内容,执行对应逻辑。比如自动触发构建、发送通知邮件等。

自己写一个Webhook(Python示例)

用Flask写一个接收Webhook的服务器,不到20行:

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/webhook/github', methods=['POST'])
def github_webhook():
    data = request.get_json()
    
    # 判断是什么事件
    event = request.headers.get('X-GitHub-Event')
    
    if event == 'push':
        print(f"收到推送!仓库: {data['repository']['name']}")
        # 在这里写你的处理逻辑
        # 比如触发构建、发通知等
        
    return jsonify({"status": "ok"}), 200

app.run(port=5000)

就这么简单。你的服务变成了一个"Webhook接收器"。

安全性注意

Webhook有个潜在问题:怎么确认请求是真的来自GitHub,不是别人伪造的?

大多数服务会提供签名验证机制。比如GitHub会带上一个X-Hub-Signature-256头,你用自己的密钥来验证这个签名,确保请求来源合法。

总结

Webhook的本质就一句话:被动等待,事件触发,自动响应

它比轮询高效得多——不用一直问"发生了吗",而是等对方说"发生了"。

几乎所有主流平台都支持Webhook:GitHub、GitLab、Stripe、飞书、钉钉、企业微信、Slack……学会Webhook,你就掌握了一种跨服务协作的基础技能。

要不要试试给你的服务接一个Webhook?从一个简单的"收到通知就打印日志"开始就好。