1. Webhook 基础概念

1.1 什么是 Webhook

Webhook 是一种基于 HTTP 的回调机制,允许一个应用在发生特定事件时,主动向另一个应用发送实时数据通知。与传统的“客户端主动拉取”模式不同,Webhook 采用“服务器主动推送”模式——事件源在事件发生时,立即向预先注册的 URL 发送 HTTP 请求(通常是 POST),携带事件相关的数据负载。

核心特征:事件驱动、实时推送、单向通知、轻量级 HTTP 回调。

一个典型的 Webhook 流程包含三个角色:

  • 事件源(Provider):产生业务事件的一方,如 GitHub、Stripe、微信支付。
  • 接收端(Consumer):注册 Webhook URL 并处理事件的一方,通常是开发者的后端服务。
  • Webhook 请求:事件源向接收端发送的 HTTP POST 请求,包含事件类型、时间戳、负载数据及签名。
Webhook 基本架构图 事件源 GitHub / Stripe 接收端 你的后端服务 HTTP POST 事件数据 + 签名 💡 事件源主动推送,接收端被动接收 无需接收端轮询,事件发生即通知

1.2 Webhook 与 API 轮询的区别

Webhook 和 API 轮询是两种完全不同的数据获取模式。轮询是接收端按固定时间间隔主动向事件源发起请求,查询是否有新数据;Webhook 则是事件源在有新数据时主动通知接收端。下表从多个维度对比两者的差异:

对比维度 Webhook(推送) API 轮询(拉取)
通信方向 事件源 → 接收端(服务器推送) 接收端 → 事件源(客户端拉取)
触发方式 事件驱动,实时触发 时间驱动,固定间隔
实时性 毫秒级,事件发生即送达 取决于轮询间隔,通常秒级到分钟级
资源消耗 低,仅在有事件时发送请求 高,大量无效请求浪费带宽和计算
实现复杂度 需暴露公网端点、验证签名 只需调用 API,无需公网端点
可靠性保障 需重试机制、幂等处理 天然幂等,可重复拉取
典型场景 支付回调、CI/CD 通知、即时消息 数据同步、状态检查、批量导出
选择建议:需要实时响应、事件频率不确定的场景优先选择 Webhook;需要批量拉取历史数据、接收端无法暴露公网端点的场景使用轮询。实践中,许多系统同时使用两者——Webhook 处理实时事件,轮询作为兜底补偿机制。
Webhook vs 轮询 对比流程图 Webhook 推送模式 事件源 接收端 ① 事件发生 ② 构造请求+签名 ③ 验证签名+处理 ④ 重试(可选) ✅ 实时推送,低延迟 API 轮询拉取模式 接收端 事件源 ① 定时请求 ② 等待响应 ③ 返回数据/空 ④ 等待间隔 ⚠️ 固定间隔,可能空转

1.3 Webhook 的典型应用场景

Webhook 在现代化系统架构中应用广泛,以下列举四个最常见的场景:

  1. 支付回调:支付宝、微信支付、Stripe 等支付网关在用户完成支付后,通过 Webhook 通知商户系统更新订单状态。这是 Webhook 最典型、对实时性要求最高的场景。
  2. CI/CD 与 DevOps:GitHub、GitLab 在代码推送、PR 合并时触发 Webhook,通知 Jenkins、GitHub Actions 等 CI 工具自动执行构建和部署流水线。
  3. 即时消息与通知:Slack、钉钉、飞书的机器人 Webhook 允许外部系统向群聊推送告警、监控事件或业务通知。
  4. 数据同步与 ETL:CRM、ERP 系统在数据变更时通过 Webhook 将增量数据实时推送到数据仓库或搜索引擎,替代批量导入。
安全提醒:Webhook 接收端暴露在公网,必须对每个请求进行签名验证,防止伪造事件注入恶意数据。本课程后续章节将详细讲解 HMAC、RSA 等签名算法的实现与校验。

下表总结了上述场景的关键特征:

应用场景 事件示例 实时性要求 签名常见算法
支付回调 支付成功、退款完成 极高(秒级) HMAC-SHA256、RSA
CI/CD 触发 Push、PR、Tag 创建 高(秒级) HMAC-SHA256
即时消息推送 告警、机器人消息 中(秒~分钟) HMAC-SHA1
数据同步 创建/更新/删除记录 中(秒~分钟) HMAC-SHA256、自定义签名