当前位置: 首页 > article >正文

Webhook入门

主要参考资料:
深入解析 Webhook:从原理到实践的全面指南: https://blog.csdn.net/weixin_43114209/article/details/144250750

目录

  • 简介
  • Webhook 与传统 API 调用的区别
  • 与轮询 (Polling) 的对比
  • 典型工作流程

简介

简单来说,Webhook 是一种“反向 API”或“事件通知回调”机制。它允许一个应用程序(服务 A)在特定事件发生时,自动向另一个应用程序(服务 B)指定的 URL(称为 Webhook URL 或端点)发送 HTTP 请求(通常是 POST 请求),通知服务 B 该事件的发生并传递相关数据。

核心概念与工作方式:

  • 订阅事件:
    你(服务 B 的开发者或管理员)在服务 A 上注册一个你控制的 Webhook URL,并指定你感兴趣的事件类型(例如,“新订单创建”、“代码提交到仓库”、“支付成功”、“用户注册”等)。
  • 事件发生:
    当服务 A 中发生了你订阅的特定事件时。
  • 发送通知:
    服务 A 会主动构造一个 HTTP 请求(通常是 POST 请求),包含与该事件相关的数据(通常是 JSON 或 XML 格式),并将这个请求发送到你之前注册的 Webhook URL。
  • 接收与处理:
    你的应用程序(运行在 Webhook URL 对应的服务器上)接收到这个 HTTP 请求。你的代码负责解析请求中的数据,并根据业务逻辑执行相应的操作(例如,更新数据库、发送通知、触发另一个工作流、调用另一个 API 等)。

Webhook 与传统 API 调用的区别

通信方式被动(事件驱动)主动(客户端发起请求)
数据流向服务端主动发送数据客户端主动请求数据
适用场景实时事件通知定期轮询或按需获取
资源消耗更高效,无需频繁轮询高资源占用,尤其是在高频轮询场景下

与轮询 (Polling) 的对比

理解 Webhook 的最好方式之一是与传统的 轮询 方式对比:

轮询 (Polling):

方式: 你的应用程序(服务 B)需要不断地、主动地向服务 A 发送请求(例如,每隔几秒或几分钟),询问:“有新事件发生吗?”

缺点:

  • 效率低下: 大部分请求可能没有新数据(空轮询),浪费网络带宽和计算资源。
  • 延迟高: 事件发生到你轮询到它之间有时间间隔,无法做到实时通知。
  • 增加服务 A 负载: 服务 A 需要处理大量轮询请求,即使没有新事件。

Webhook:

方式: 服务 A 在事件发生时主动推送通知给你的应用程序(服务 B)。

优点:

  • 实时性高: 事件发生后几乎立即通知。
  • 效率高: 只在有实际事件时才发送请求,节省资源。
  • 减轻服务 A 负载: 服务 A 不需要处理大量无意义的轮询请求。

典型工作流程

  1. 配置:

在服务 A(事件源)中设置 Webhook URL(服务 B 的接收端点)和订阅的事件类型。

  1. 触发:

服务 A 发生订阅事件。

  1. 构造请求:

服务 A 生成包含事件数据(Payload)的 HTTP POST 请求。

  1. 发送请求:

服务 A 将请求发送到配置的 Webhook URL。

  1. 接收:

服务 B 的服务器(监听该 URL)接收到请求。

  1. 验证(可选但推荐):

身份验证:服务 B 验证请求确实来自服务 A(常用方法:API Key 认证、Basic Auth、OAuth、JWT 等)。签名验证:服务 B 使用预共享密钥验证请求体的签名(常用方法:HMAC),确保数据在传输过程中未被篡改。

  1. 解析与处理:

服务 B 解析请求体(Payload),提取所需信息,执行业务逻辑(如更新数据库、发送邮件/Slack 消息、触发 CI/CD 等)。

  1. 响应:

服务 B 向服务 A 返回一个 HTTP 状态码:

2xx (通常是 200 OK 或 202 Accepted):表示成功接收并处理(或已接受处理)。
4xx (如 400 Bad Request, 401 Unauthorized):表示请求有误或未授权,服务 A 可能会停止重试或记录错误。
5xx (如 500 Internal Server Error):表示服务 B 处理时出错,服务 A 通常会进行重试。

  1. 重试机制(通常由服务 A 实现):

如果服务 B 没有返回 2xx 状态码,或者请求超时/失败,服务 A 通常会按照预定义的策略(如指数退避)进行若干次重试。

http://www.lryc.cn/news/2392910.html

相关文章:

  • LangChain整合Milvus向量数据库实战:数据新增与删除操作
  • LSTM+Transformer混合模型架构文档
  • Symbol、Set 与 Map:新数据结构探秘
  • Spring Boot+Activiti7入坑指南初阶版
  • 如何在 Odoo 18 中创建 PDF 报告
  • 【ROS2实体机械臂驱动】rokae xCoreSDK Python测试使用
  • c/c++的opencv椒盐噪声
  • C++ TCP程序增加TLS加密认证
  • 构建一个“论文检索 + 推理”知识库服务,支持用户上传 PDF/LATEX 源码后,秒级检索并获得基于内容的问答、摘要、引用等功能
  • VLC-QT 网页播放RTSP
  • for(auto a:b)和for(auto a:b)的区别
  • 第2章-12 输出三角形面积和周长(走弯路解法)
  • Caddy如何在测试环境中使用IP地址配置HTTPS服务
  • shell中与>和<相关的数据流重定向操作符整理
  • 【航天远景 MapMatrix 精品教程】08 Pix4d空三成果导入MapMatrix
  • 创建型设计模式之Prototype(原型)
  • JNI开发流程
  • STM32G4 电机外设篇(二) VOFA + ADC + OPAMP
  • RAG应用:交叉编码器(cross-encoder)和重排序(rerank)
  • 微服务难题?Nacos服务发现来救场
  • C# 结合PaddleOCRSharp搭建Http网络服务
  • 【连接器专题】SD卡座规格书审查需要审哪些方面?
  • JS手写代码篇---手写节流函数
  • UE5 C++动态调用函数方法、按键输入绑定 ,地址前加修饰符
  • eBest智能价格引擎系统 助力屈臣氏饮料落地「价格大脑」+「智慧通路」数字基建​
  • ubuntu mysql 8.0.42 基于二进制日志文件位置和GTID主从复制配置
  • Kettle 远程mysql 表导入到 hadoop hive
  • 完整解析 Linux Kdump Crash Kernel 工作原理和实操步骤
  • 菜鸟之路Day36一一Web开发综合案例(部门管理)
  • LangChain实战:MMR和相似性搜索技术应用