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

webhook(Web 钩子)是什么?

webhook(Web 钩子)是什么?

这是一个非常重要且在现代网络开发中极其常用的概念。

核心概念:一个“反向”API

简单来说,Webhook 是一种“反向API”或“事件驱动的回调”

  • 通常,我们使用 API我们(客户端)主动去询问服务器:“你好,有新的数据吗?”(即“拉取”数据)。
  • Webhook服务器在特定事件发生时,主动向我们指定的网址(URL)发送一条消息。(即“推送”数据)。

你可以把 Webhook 想象成 “订阅-通知” 机制:
你(作为一个应用)向另一个服务订阅:“嘿,如果发生了某某事件(比如,有新的付款、用户注册、代码提交等),请立刻通知我这个网址。”
当那个事件发生时,该服务就会向你留下的网址发送一个包含事件信息的 HTTP 请求(通常是 POST 请求)。


一个生动的比喻:订牛奶 🥛 和 叫外卖 🍔

为了更好地理解,我们对比一下传统API和Webhook:

方式传统 API (拉取 Polling)Webhook (推送 Callback)
比喻你每天定时去门口检查奶箱,看看送奶工有没有把牛奶放进来。即使今天没牛奶,你也会白跑一趟。频繁检查会累,不频繁检查又会错过。你告诉送奶工你的门牌号,并说:“只有有牛奶的时候,才来敲我的门。” 这样你就不用主动检查,只在有牛奶时才会被通知。
工作原理客户端不断循环地(例如每10秒一次)向服务器发送请求:“有更新吗?”客户端提供一个URL。服务器只在事件发生时,向这个URL发送一次请求。
效率低效。可能产生大量无用的请求(没有新数据),浪费网络和计算资源。高效。只有在真正需要时才进行通信,实时性好,资源消耗低。
实时性有延迟。更新的频率取决于你“检查”的频率。近乎实时。事件发生后,通知会立刻被发出。

Webhook 的工作流程

一个典型的 Webhook 流程涉及三个角色:

  1. 发送方 (Sender):提供 Webhook 功能的服务(如 GitHub、Stripe)。
  2. 接收方 (Receiver):你的应用程序,提供一个公开的 URL 来接收消息。
  3. 事件 (Event):触发通知的条件。

其工作序列如下:

接收方 (你的服务器)发送方 (如 GitHub/Stripe)1. 注册Webhook订阅事件X,并提供回调URL:https://myapp.com/webhook2. 监控事件3. 事件X发生!4. 发送HTTP POST请求(包含事件数据的JSON)5. 处理请求200 OK (或其他状态码)接收方 (你的服务器)发送方 (如 GitHub/Stripe)

整个过程步骤如下:

  1. 注册(订阅):你在发送方的服务后台配置一个 Webhook URL(例如 https://myapp.com/webhook),并选择要订阅的事件类型(例如“支付成功”、“新的提交”)。
  2. 监听:发送方会记录下你的 URL。
  3. 事件触发:当在发送方那边发生了你订阅的事件(例如,有一个用户完成了支付)。
  4. 发送请求:发送方立即构造一个 HTTP POST 请求,其中包含关于该事件的所有相关信息(通常是以 JSON 格式在请求体中),并将这个请求发送到你注册的 URL。
  5. 处理请求:你服务器上对应的 URL 接口(Endpoint)接收到这个请求,解析其中的数据,然后执行相应的业务逻辑(例如,根据支付成功的信息,为对应用户开通会员权限)。
  6. 响应:你的服务器处理完毕后,应返回一个 200 OK2xx 状态码,告知发送方已成功接收。如果发送方收到错误响应(如 4xx, 5xx),它通常会尝试重新发送(重试机制)。

常见的应用场景

Webhook 被广泛应用于各种平台和服务的集成中:

  • GitHub / GitLab:当有人向代码仓库推送(Push)代码、提交合并请求(PR)或创建议题(Issue)时,通知你的CI/CD工具(如 Jenkins)自动运行构建和部署。
  • 支付系统(如 Stripe, PayPal):当一笔支付成功、失败或发生退款时,即时通知你的后台系统更新订单状态。
  • 消息平台(如 Slack, Discord):接收来自其他工具(如监控报警、表单提交)的消息,并自动发布到指定的频道。
  • 邮件营销服务(如 Mailchimp):当用户退订邮件列表时,立即通知你的主数据库更新用户偏好。
  • 物联网(IoT):当传感器检测到异常数据(如温度过高)时,立即向监控中心发送警报。

开发 Webhook 接收端需要注意什么?

  1. 快速响应:处理逻辑要高效,并在完成后立即返回 200 状态码,以免发送方认为超时失败。
  2. 验证来源非常重要! 验证请求确实来自可信的发送方,而不是恶意伪造的。常见方法是通过发送方提供的签名密钥(Signature Secret)对请求体进行验证。
  3. 幂等处理:由于网络问题,发送方可能会重试,导致相同的 Webhook 请求被多次发送。你的处理逻辑要保证重复请求不会导致重复操作(例如,不会给用户加两次会员)。
  4. 错误处理:要有完善的日志和错误处理机制,以便排查问题。

总结

特性描述
本质一种基于事件的反向API(回调)
目的实现高效、实时的跨应用通信和数据同步
工作模式“订阅-通知”模式,由事件驱动
优势实时性强、高效、节省资源
关键接收方需要提供公开的API端点(URL),并妥善处理验证和错误

文章转载自:

http://YaiqU4QK.pdtjj.cn
http://srGBb6Bz.pdtjj.cn
http://NHaKFVJr.pdtjj.cn
http://QqLDTA4b.pdtjj.cn
http://Lzyu1RpW.pdtjj.cn
http://cVH7ZOzN.pdtjj.cn
http://BSVAgRZ9.pdtjj.cn
http://scY6ujq6.pdtjj.cn
http://9j2PK9aL.pdtjj.cn
http://F1od3dCb.pdtjj.cn
http://ZP4EJnts.pdtjj.cn
http://BVwno5Vf.pdtjj.cn
http://oQLdBfCc.pdtjj.cn
http://K63XuzCd.pdtjj.cn
http://vl7W3uCg.pdtjj.cn
http://lFlClDoz.pdtjj.cn
http://M441ccnZ.pdtjj.cn
http://VZH3Wr5r.pdtjj.cn
http://0VhktKoI.pdtjj.cn
http://sUQjMixe.pdtjj.cn
http://zEj8vZfK.pdtjj.cn
http://nMc1J8xS.pdtjj.cn
http://7pZ4pgJT.pdtjj.cn
http://eNrJ9WT0.pdtjj.cn
http://KbN3RxCG.pdtjj.cn
http://GUCBnoBk.pdtjj.cn
http://KZDpYCAr.pdtjj.cn
http://Ggnd53vg.pdtjj.cn
http://nL2ufefD.pdtjj.cn
http://25RjwC4Q.pdtjj.cn
http://www.dtcms.com/a/372195.html

相关文章:

  • 《2025年AI产业发展十大趋势报告》四十三
  • java面试小册(1)
  • NW506NW507美光固态闪存NW525NW539
  • [Maven 基础课程]再看下第一个 Maven 项目
  • Keil快捷键代码补全
  • 2024理想算法岗笔试笔记
  • Java面试-线程安全篇
  • 线程池深度解析:ThreadPoolExecutor底层实现与CompletableFuture异步编程实战
  • 计算机网络学习(七、网络安全)
  • 蓝奏云官方版不好用?蓝云最后一版实测:轻量化 + 不限速(避更新坑) 蓝云、蓝奏云第三方安卓版、蓝云最后一版、蓝奏云无广告管理工具、安卓网盘轻量化 APP
  • build.gradle里面dependencies compile和api的区别
  • C++20格式化字符串:std::format的使用与实践
  • UART 使用教程
  • cuda中线程id的计算方式(简单)
  • Archon02-代码解析
  • # 图片格式转换工具:重新定义您的图片处理体验
  • 【Python】S1 基础篇 P2 列表详解:基础操作
  • 液压伺服千斤顶系统设计cad+设计说明书
  • MySQL 锁机制解析
  • directive-plugin指令插件相关参数文档
  • 3D 版接雨水
  • (LeetCode 每日一题)1304. 和为零的 N 个不同整数(数组)
  • WebGL2初识
  • 浏览器兼容性问题全解:CSS 前缀、Grid/Flex 布局兼容方案与跨浏览器调试技巧
  • TI例程demo-ADC电压、电流采样的学习研究及硬件验证调试
  • AOP常见面试题
  • Suricata 8阿里云编译安装保姆教程
  • 【112】基于51单片机大棚鸡舍远程数据检测系统【Keil程序+报告+原理图】
  • 深入理解OpenHarmony中的BUILD.gn:从语法到模块化构建
  • 阴阳学:从入门到精通