API 101 专栏 · 第 6

Webhooks: 应用程序之间的实时通信

2025年03月17日
Webhooks: 应用程序之间的实时通信

什么是 Webhooks?

定义 Webhooks 及其在现代应用程序中的作用

Webhooks 是由特定事件触发的自动 HTTP 回调,使应用程序之间能够进行实时数据传输。与传统的依赖轮询(重复检查更新)的 API 不同,webhooks 使用推送模型,消除延迟并减少服务器开销。例如,当通过 Stripe 处理付款时,webhook 会立即通知你的应用程序——无需手动检查。

示例

  • Slack 使用 webhooks 发送频道通知。
  • GitHub 在代码推送时触发 CI/CD 流水线。

Webhooks 如何工作:简单分解

Webhook 工作流程涉及四个组件:

  1. 事件触发器:一个动作(例如,付款成功、用户注册)。
  2. HTTP POST 请求:发送者(例如,Stripe)分发 payload。
  3. Payload:JSON/XML 数据(例如,{ "status": "paid", "amount": 100 })。
  4. 端点:应用程序中处理 payload 的 URL。

Webhooks 与 API:何时使用哪个?

标准Webhooks传统 API
通信方式基于推送(事件驱动)基于拉取(轮询)
延迟接近即时取决于轮询间隔
资源使用低(无重复请求)高(频繁轮询)

何时使用 Webhooks

  • 你需要实时更新(例如,付款确认)。
  • 轮询不切实际(例如,IoT 传感器警报)。

为什么要使用 Webhooks?

实时通信的需求

电子商务、IoT 和 DevOps 等行业需要即时数据流:

  • 电子商务:如果结账时间超过 3 秒,47% 的用户会放弃购物车(Baymard Institute)。
  • IoT:智能设备需要亚秒级警报(例如,烟雾探测器)。
  • DevOps:CI/CD 流水线依赖 GitHub webhooks 来触发部署。

轮询的局限性

  • 延迟:平均轮询间隔(5-15 分钟)会延迟更新。
  • 带宽浪费:70% 的轮询请求不返回数据(Cloudflare 报告)。

Webhooks 的关键优势

  1. 减少服务器负载:Webhooks 将事件密集型应用程序的 API 调用减少了 80%(Postman 调查)。
  2. 更快的响应时间:即时更新改善了用户体验(例如,实时订单跟踪)。
  3. 简化的工作流程:自动化发票生成或用户引导等任务。

常见用例

  • 付款处理:Stripe 发送付款成功/失败警报。
  • CI/CD 流水线:GitHub webhooks 触发 Jenkins 构建。
  • IoT 警报:智能恒温器通知用户温度峰值。

如何实现 Webhooks:最佳实践

设置 Webhooks 的分步指南

1. 选择关键事件

识别高影响事件(例如,order.completeduser.deleted)。

示例

1# Stripe webhook 设置用于付款成功  
2curl https://api.stripe.com/v1/webhooks \  
3  -u sk_test_123: \  
4  -d url=https://yourapp.com/webhooks/stripe \  
5  -d "events[]=charge.succeeded"  

2. 创建安全端点

  • 使用 HTTPS 加密传输中的数据。
  • 使用 HMAC 签名验证 payload。

代码片段(Node.js)

1app.post('/webhooks/stripe', (req, res) => {  
2  const sig = req.headers['stripe-signature'];  
3  const payload = req.body;  
4  try {  
5    const event = stripe.webhooks.constructEvent(payload, sig, secret);  
6    // 处理事件  
7  } catch (err) {  
8    res.status(400).send(`Webhook 错误: ${err.message}`);  
9  }  
10});  

3. 优雅地处理错误

  • 实施指数退避重试(例如,以 1 秒、5 秒、25 秒延迟重试 3 次)。
  • 使用死信队列(例如,AWS SQS)存储失败的 payload。

4. 使用工具测试

  • Postman:模拟 webhook 请求。
  • ngrok:暴露本地端点进行测试。
  • webhook.site:实时检查 payload。

安全最佳实践

  • 令牌验证:分配唯一令牌以验证发送者。
  • 速率限制:阻止来自单个 IP 的每分钟超过 100 个请求。
  • IP 白名单:将传入流量限制为受信任的来源(例如,Stripe 的 IP 范围)。

监控和维护

  • 记录 payload 以供审计(工具:ELK Stack、Splunk)。
  • 通过 API 网关跟踪交付状态(例如,API7 Enterprise)。

Webhooks 和 API 网关:简化实时工作流程

API 网关如何增强 Webhook 管理

API7 Enterprise 这样的 API 网关提供:

  • 集中控制:路由、认证和限流 webhooks。
  • 自动扩展:处理流量峰值(例如,黑色星期五销售)。
  • 分析:监控延迟、成功率和 payload 大小。

API7 Enterprise 的关键特性

  1. 安全性:JWT 验证、OAuth2 和 HMAC 签名。
  2. 实时指标:跟踪失败、重试和 payload 趋势。
  3. 云原生集成:部署在 Kubernetes、AWS Lambda 或 Azure 上。

结论

Webhooks 消除了轮询的低效率,降低成本并加速工作流程。对于关键任务系统,将 webhooks 与 API 网关配对确保可扩展性和安全性。

微信咨询

获取方案