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 不需要处理大量无意义的轮询请求。
典型工作流程
- 配置:
在服务 A(事件源)中设置 Webhook URL(服务 B 的接收端点)和订阅的事件类型。
- 触发:
服务 A 发生订阅事件。
- 构造请求:
服务 A 生成包含事件数据(Payload)的 HTTP POST 请求。
- 发送请求:
服务 A 将请求发送到配置的 Webhook URL。
- 接收:
服务 B 的服务器(监听该 URL)接收到请求。
- 验证(可选但推荐):
身份验证:服务 B 验证请求确实来自服务 A(常用方法:API Key 认证、Basic Auth、OAuth、JWT 等)。签名验证:服务 B 使用预共享密钥验证请求体的签名(常用方法:HMAC),确保数据在传输过程中未被篡改。
- 解析与处理:
服务 B 解析请求体(Payload),提取所需信息,执行业务逻辑(如更新数据库、发送邮件/Slack 消息、触发 CI/CD 等)。
- 响应:
服务 B 向服务 A 返回一个 HTTP 状态码:
2xx (通常是 200 OK 或 202 Accepted):表示成功接收并处理(或已接受处理)。
4xx (如 400 Bad Request, 401 Unauthorized):表示请求有误或未授权,服务 A 可能会停止重试或记录错误。
5xx (如 500 Internal Server Error):表示服务 B 处理时出错,服务 A 通常会进行重试。
- 重试机制(通常由服务 A 实现):
如果服务 B 没有返回 2xx 状态码,或者请求超时/失败,服务 A 通常会按照预定义的策略(如指数退避)进行若干次重试。
相关文章:
Webhook入门
主要参考资料: 深入解析 Webhook:从原理到实践的全面指南: https://blog.csdn.net/weixin_43114209/article/details/144250750 目录 简介Webhook 与传统 API 调用的区别与轮询 (Polling) 的对比典型工作流程 简介 简单来说,Webhook 是一种“…...
LangChain整合Milvus向量数据库实战:数据新增与删除操作
导读:在AI应用开发中,向量数据库已成为处理大规模语义搜索和相似性匹配的核心组件。本文通过详实的代码示例,深入探讨LangChain框架与Milvus向量数据库的集成实践,为开发者提供生产级别的向量数据管理解决方案。 文章聚焦于向量数…...
LSTM+Transformer混合模型架构文档
LSTMTransformer混合模型架构文档 模型概述 本项目实现了一个LSTMTransformer混合模型,用于超临界机组协调控制系统的数据驱动建模。该模型结合了LSTM的时序建模能力和Transformer的自注意力机制,能够有效捕捉时间序列数据中的长期依赖关系和变量间的复…...
Symbol、Set 与 Map:新数据结构探秘
Symbol、Set 与 Map:新数据结构探秘 引言 ECMAScript 6 (ES6) 引入了三种强大的数据结构:Symbol、Set 与 Map,它们解决了 JavaScript 开发中的特定痛点,为我们提供了更多工具来处理复杂的数据操作。 Symbol:唯一标识…...

Spring Boot+Activiti7入坑指南初阶版
介绍 Activiti 是一个轻量级工作流程和业务流程管理 (BPM) 平台,面向业务人员、开发人员和系统管理员。其核心是一个超快且坚如磐石的 Java BPMN 2 流程引擎。它是开源的,并根据 Apache 许可证分发。Activiti 可以在任何 Java 应用程序、服务器、集群或云中运行。它与 Spri…...

如何在 Odoo 18 中创建 PDF 报告
如何在 Odoo 18 中创建 PDF 报告 Qweb 是 Odoo 强大的模板引擎,旨在轻松将 XML 数据转换为 HTML 文档。其功能特性包括基于属性的自定义、条件逻辑、动态内容插入及多样化的报告模板选项。这种多功能性使 Qweb 成为制作个性化、视觉吸引力强的报告、电子邮件和文档…...

【ROS2实体机械臂驱动】rokae xCoreSDK Python测试使用
【ROS2实体机械臂驱动】rokae xCoreSDK Python测试使用 文章目录 前言正文配置环境下载源码配置环境变量测试运行修改点说明实际运行情况 参考 前言 本文用来记录 xCoreSDK-Python的调用使用1。 正文 配置环境 配置开发环境,这里使用conda做python环境管理&…...
c/c++的opencv椒盐噪声
在 C/C 中实现椒盐噪声 椒盐噪声(Salt-and-Pepper Noise),也称为脉冲噪声(Impulse Noise),是数字图像中常见的一种噪声类型。它的特点是在图像中随机出现纯白色(盐)或纯黑色&#x…...
C++ TCP程序增加TLS加密认证
TCP为什么要增加TLS TCP程序添加TLS主要是为了解决TCP协议本身的安全缺陷。TCP作为传输层协议,虽然提供了可靠的数据传输,但它是明文传输,存在几个关键的安全问题: 数据泄露风险:TCP传输的数据完全暴露在网络中,任何能够监听网络流量的人都可以直接读取传输内容。这对于…...
构建一个“论文检索 + 推理”知识库服务,支持用户上传 PDF/LATEX 源码后,秒级检索并获得基于内容的问答、摘要、引用等功能
文章目录 1 总体目标 / Overall Goal2 数据管线 / Data Pipeline3 检索策略 / Retrieval Strategy4 服务切分 / Service Decomposition5 Agent & Prompt 设计 / Agent & Prompt6 核心功能 / Core Features7 评测与监控 / Evaluation & Monitoring8 面试亮点 / Inte…...

VLC-QT 网页播放RTSP
先看效果图,代码在文章末尾,包含源码,vlc-qt完整的库 环境说明:VS 2017 QTQt5.13.0 MSVC2017 32位 将vlc_install 目录下的bin,include,lib里所有的东西分别放在qt目录下 bin -> C:\Qt\Qt5.13.0\5.13.0\msvc2017\bin include->C:\Qt\Qt5.13.0\5.13.0\msvc201…...
for(auto a:b)和for(auto a:b)的区别
#include<iostream> using namespace std; int main() {string s( "hello world" );for (auto c:s)c t ;cout<<s<<endl; //结果为hello worldfor (auto &c:s)c t ;cout<<s<<endl; //结果为ttttttttttt }for(auto a:b)中b为一…...
第2章-12 输出三角形面积和周长(走弯路解法)
本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:areas(s−a)(s−b)(s−c),其中s(abc)/2。 import math de…...
Caddy如何在测试环境中使用IP地址配置HTTPS服务
前言 在开发和测试环境中,我们经常需要搭建HTTPS服务进行测试。但通常Let’s Encrypt等证书颁发机构要求使用有效域名,不直接支持IP地址。本文将详细介绍如何使用Caddy在测试环境中通过IP地址配置HTTPS服务,使用自签名证书解决这一问题。 环…...
shell中与>和<相关的数据流重定向操作符整理
shell中与>和<相关的数据流重定向操作符整理 输出重定向操作符>>>2>2>>&> 或 >&&>> 输入重定向操作符<<<<<< 组合重定向2>&1 文件描述符相关重定向[n]< file 和 [n]> file>&- 和 <&…...

【航天远景 MapMatrix 精品教程】08 Pix4d空三成果导入MapMatrix
【航天远景 MapMatrix 精品教程】08 Pix4d空三成果导入MapMatrix 文章目录 【航天远景 MapMatrix 精品教程】08 Pix4d空三成果导入MapMatrix一、资料准备1.去畸变影像2.相机文件3.外方位元素二、创建工程1.新建工程2.导入照片3.编辑相机文件4.编辑外方位元素文件,导入外方位元…...

创建型设计模式之Prototype(原型)
创建型设计模式之Prototype(原型) 摘要: Prototype(原型)设计模式通过复制现有对象来创建新对象,避免重复初始化操作。该模式包含Prototype接口声明克隆方法、ConcretePrototype实现具体克隆逻辑ÿ…...

JNI开发流程
一. 引言 最近在做一个自己的项目,就是基于FastDDS封装一套JAVA库,让android和java应用可以使用dds的功能。 由于FastDDS是使用C编写的开源库,因此java的类库想要调用FastDDS的接口,需要额外编写一个JNI层的动态库对FastDDS的接口…...

STM32G4 电机外设篇(二) VOFA + ADC + OPAMP
目录 一、STM32G4 电机外设篇(二) VOFA ADC OPAMP1 VOFA1.1 VOFA上位机显示波形 2 ADC2.1 用ADC规则组对板载电压和电位器进行采样 3 OPAMP(运放)3.1 结合STM32内部运放和ADC来完成对三相电流的采样3.2 运放电路分析 附学习参考…...
RAG应用:交叉编码器(cross-encoder)和重排序(rerank)
文章目录 Sentence Transformers交叉编码器交叉编码器使用示例检索和重排序Sentence Transformers Sentence Transformers 支持两种类型的模型: Bi-encoders 和 Cross-encoders。Bi-encoders 更快更可扩展,但 Cross-encoders 更准确。虽然两者都处理类似的高水平任务,但何时…...

微服务难题?Nacos服务发现来救场
文章目录 前言1.什么是服务发现2.Nacos 闪亮登场2.1 服务注册2.2 服务发现 3.Nacos 的优势3.1 简单易用3.2 高可用3.3 动态配置 4.实战演练4.1安装 Nacos4.2 服务注册与发现示例代码(以 Spring Boot 为例) 总结 前言 大家好,我是沛哥儿。今天…...

C# 结合PaddleOCRSharp搭建Http网络服务
Windows打开端口: 控制面板 > 系统和安全 > 防火墙> 高级设置 → 入站规则 → 右侧选择 → 新建规则 → 端口 → 协议类型 TCP→ 端口 using System; using System.Drawing; using System.IO; using System.Net; using System.Text; using System.Threadi…...

【连接器专题】SD卡座规格书审查需要审哪些方面?
在审查SD卡座规格书时,我们需要考虑哪些方面? 首先在拿到一份SD卡座的详细规格书时,一般供应商给到的规格书中包括了一些基础信息、产品图纸信息、技术参数信息,同时有些供应商会给出产品可靠性测试报告。因此我们会从这几个要素去看规格书。 基础信息 基础信息一般会给变更…...
JS手写代码篇---手写节流函数
8、节流函数 什么是节流函数? 指规定一个单位时间,在这个单位时间内,只能有一次触发事件的回调函数执行,如果在同一个单位时间内某事件被触发多次,只有一次能生效。 与防抖函数有什么区别? 防抖函数是延…...
UE5 C++动态调用函数方法、按键输入绑定 ,地址前加修饰符
UE5 C动态调用函数方法、按键输入绑定 ,地址前加修饰符&,这个符号忘记输入的话,编译一直报错不通过 void ASnakeHead::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { Super::SetupPlayerInputComponent(PlayerIn…...

eBest智能价格引擎系统 助力屈臣氏饮料落地「价格大脑」+「智慧通路」数字基建
从价格策略到终端执行,数字化正在重构饮料行业竞争壁垒! 近日,eBest为屈臣氏饮料提供的智能价格引擎系统已正式上线并投入运营。同时,基于eBest SFA方案且与屈臣氏饮料业务场景深度耦合的Smart Field Operation智慧通路项目正式启…...
ubuntu mysql 8.0.42 基于二进制日志文件位置和GTID主从复制配置
目录 1 操作系统信息 2 MySql数据库版本 3 主机列表 4 MySQL服务器都安装依赖 5 主库服务器安装mysql软件步骤: 6 从服务器安装mysql软件步骤 7 基于二进制日志文件位置的主从复制配置 8 使用全局事务标识符进行主从复制(GTID) 9 部署过程遇到问题 1 操作系…...

Kettle 远程mysql 表导入到 hadoop hive
kettle 远程mysql 表导入到 hadoop hive (教学用 ) 文章目录 kettle 远程mysql 表导入到 hadoop hive创建 对象 执行 SQL 语句 -mysql 导出 CSV格式CSV 文件远程上传到 HDFS运行 SSH 命令远程登录 run SSH 并执行 hadoop fs -put 建表和加载数据总结 创…...

完整解析 Linux Kdump Crash Kernel 工作原理和实操步骤
完整解析 Linux Kdump Crash Kernel 工作原理和实操步骤 一、前言 在使用 Linux 操作系统进行内核开发或者系统维护时,内核 panic 是最常见的系统崩溃环节。如果想要在内核崩溃后立即分析环境和输出内核内存 dump,Kdump crashkernel 是最接近完美的解…...

菜鸟之路Day36一一Web开发综合案例(部门管理)
菜鸟之路Day36一一Web开发综合案例(部门管理) 作者:blue 时间:2025.5.28 文章目录 菜鸟之路Day36一一Web开发综合案例(部门管理)一.环境搭建二.开发规范三.部门管理3.1查询3.2删除3.3新增3.3修改根据id来…...