Webhook 是什么:原理、实现及缺点分析
背景
在使用钉钉机器人、企业微信机器人、飞书机器人、GitHub WebHook、腾讯问卷等应用时,这些应用都提供了 Webhook。它允许系统之间在事件发生时主动传递信息,而无需持续轮询。
什么是 Webhook?
通俗来说,就像你在手机上设置一个闹钟,当时间到达时手机会响铃通知你。Webhook 是一种简单的 HTTP 回调机制,它允许一个应用程序在事件发生时自动通过 HTTP 请求通知另一个应用程序。这意味着 Webhook 在某个特定事件发生时,自动向指定的 URL 发送数据,通常是 JSON 或 XML 格式。与传统的 API 不同,Webhook 是一种'推送'机制,而不是'拉取'机制。
Webhook 的工作原理
Webhooks 的工作流程可以总结为以下几个步骤:
- 事件触发:当某个应用程序中的特定事件发生时,系统就会触发 Webhook。例如,用户完成了一笔支付,或代码库有新的提交。
- 发送 HTTP 请求:事件发生后,应用会通过 HTTP 请求(通常是 POST 请求)将事件数据发送到预设的 URL。这个 URL 是接收 Webhook 的端点,通常是另一个应用程序或服务提供的 API。
- 数据处理:接收方应用接收到 HTTP 请求后,会解析请求中的数据,并根据这些数据进行相应的操作。例如,它可能会更新数据库,发送通知,或触发其他操作。
Webhook 与 API 的区别
尽管 Webhook 和传统的 API 都用于系统间的数据交换,它们的工作方式有所不同:
- Webhook:是一种主动通知机制。当事件发生时,Webhooks 会自动发送数据到指定的 URL,而接收方无需发起请求。
- API:是一种请求 - 响应模式。接收方必须主动发起请求来获取数据或执行操作。
因此,Webhooks 更适合处理实时事件和通知,特别是在需要快速响应的场景中,如支付确认、CI/CD 构建等。
Webhook 的常见用途
Webhooks 在很多领域都得到了广泛应用,以下是一些典型的应用场景:
- 钉钉机器人:通过使用 webhook 实现各种事件订阅,让开发者应用程序即可接收到事件内容推送。
- 支付系统:支付平台(如 Stripe、PayPal)通常使用 Webhook 来通知商家支付状态的变化。当一个支付成功时,支付平台会触发 Webhook 通知商家进行订单更新或发货操作。
- 代码托管平台:像 GitHub 或 GitLab 这样的代码托管平台使用 Webhooks 来通知持续集成(CI)系统代码库的变化。例如,推送新的代码或创建拉取请求时,Webhooks 会触发自动化构建、测试或部署。
- 社交媒体平台:社交媒体应用(如 Twitter 或 Facebook)可能会使用 Webhooks 来推送实时更新。例如,当某个用户发布了新内容或有评论时,Webhooks 会通知其他系统进行处理。
- 聊天应用:像 Slack 或 Discord 这样的聊天平台允许通过 Webhooks 接收外部系统发送的消息,实时更新聊天频道中的内容。
如何实现 Webhook?
实际开发中,要实现 webhook 往往更加复杂,需要做算法安全校验。各大平台都会提供对应的工具包简化操作,按照对应文档即可快捷操作。这里做一个简单 demo 展示接入流程。
1. 设置 Webhook URL
接收方服务需要定义一个 Webhook 接口(URL),这个 URL 用于接收来自发送方系统的 HTTP 请求。通常,这个接口会解析 HTTP 请求中的数据,并根据业务需求进行处理。
2. 配置发送方
在发送方应用中(如 GitHub、Stripe 等),需要配置 Webhook。当事件发生时,系统会将相关数据通过 HTTP 请求发送到你设置的 Webhook URL。
以下是几个简单的 Webhook 示例。
下面代码展示了如何在 Python 环境中实现接收 Webhook 请求:
from flask Flask, request
app = Flask(__name__)
():
data = request.json
(, data)
,
__name__ == :
app.run(debug=)

