Webhook 是什么?详解其工作原理
在现代技术中,一切都相互连接,每个应用程序通过许多服务的组合和协调实现无缝工作。这种协调是通过 webhooks 实现的。
Webhooks 是基于 HTTP 的回调函数,其中一个服务使用 API 立即通知另一个服务发生的事件。这就是简单的版本。从技术上讲,根据最早概念化 webhooks 的 Jeff Lindsay 的说法,webhooks 是 “使用 HTTP 进行的用户定义回调”。
Webhooks 的基础知识
以下是 webhooks 的基础知识:
- 事件驱动聊天: 应用程序可以使用 webhooks 在特定事件发生时互相聊天,而不是不断检查,比如新客户订单或朋友的生日。
- 推送通知,无需等待: 不用刷新页面即可看到更新。Webhooks 就像接收通知一样——应用程序在重要事件发生时立即通知另一个应用程序。这样更快捷,节省时间。
- 带详细信息的 Web 消息: Webhooks 使用 web 调用发送消息。这些消息包括简短的报告,例如 JSON 格式 的常见新闻更新,通知发生了什么。
- 实时更新: 由于 webhooks 立即提供信息,应用程序可以立即保持互相之间的最新状态。
Webhooks的工作原理?
- 事件发生: 事件触发 webhook 过程。这个事件可以是任何内容,从网站上新客户注册到商店存货水平的变化等。
- HTTP POST: 事件触发后,将向指定的 URL 发送 HTTP POST 请求,即 webhook URL。此 URL 指向一个专门设计用于接收和处理这些 webhook 通知的 Web 服务器。
- 触发 Webhook: 接收 HTTP POST 请求 后,webhook 会在 Web 服务器上触发。
- 通知: 然后,webhook 服务器解析包含在 HTTP POST 请求中的数据。这些数据通常包含触发 webhook 事件的详细信息。
- 接收和处理请求: 然后,webhook 服务器验证请求的真实性并相应处理数据。
- 采取行动: 最后,根据从事件接收的数据,webhook 服务器执行特定的操作。这种操作可以根据具体应用程序而有所不同,但可能涉及更新数据库,发送电子邮件通知或触发另一个工作流程。
简单来说,webhooks 充当各应用程序之间的信使。它们通知应用程序特定事件的发生并提供相关数据,以便应用程序可以采取相应的行动。
在 GitHub 中实现 Webhooks
现在我们已经了解了 webhooks 的基础知识并理解了其工作原理,让我们尝试在最流行的 Dev 应用程序之一 GitHub 中实现它。
第 1 步: 转至您的存储库设置
- 登录到您的 GitHub 账户。
- 转至您想要设置 webhook 的存储库。
- 单击设置,然后选择 Webhooks
第 2 步: 添加新的 Webhook
- 单击添加 webhook 按钮
- 在 Payload URL 字段中,输入要接收 webhook 有效负载的服务器的 URL
第 3 步: 配置 Payload URL 和 Content-Type
- 选择内容类型。对于 JSON 有效载荷,请选择
application/json。 - 可选地,设置用于安全性的 Secret,用于验证接收的有效负载
第 4 步: 选择触发 Webhook 的事件
- 决定哪些事件应触发 Webhook。您可以选择各个事件或选择接收它们全部。
第 5 步: 激活 Webhook
- 确保选中 Active 复选框以立即激活Webhook
- 单击 添加Webhook 以保存配置
Node.js 中的 Webhook 接收器的示例代码片段:
const express = require('express');
const crypto = require('crypto');
const bodyParser = require('body-parser');const app = express();
const port = 3000;const secret = 'mySecret'; // 用您的GitHub webhook密钥替换
app.use(bodyParser.json());app.post('/webhook', (req, res) => {const signature = `sha1=${crypto.createHmac('sha1', secret).update(JSON.stringify(req.body)).digest('hex')}`;if (req.headers['x-hub-signature'] === signature) {console.log('接收到Webhook:', req.body);// 处理webhook事件res.status(200).send('已接收Webhook!');} else {res.status(401).send('无效签名');}
});app.listen(port, () => {console.log(`服务器正在监听 http://localhost:${port}`);
});
这段代码创建了一个简单的服务器,监听在 /webhook 处接收 POST 请求。它使用您在 GitHub 中配置的密钥验证请求签名。当发生 webhook 事件时,GitHub 将以事件数据的形式发送 POST 请求至指定的有效载荷 URL。然后您的服务器可以相应地处理这些数据。
请记住将 'mySecret' 替换为您在 GitHub 中设置的实际密钥。这样可以确保您接收的有效负载确实来自 GitHub 而不是冒名顶替者。
一些 Webhooks 的真实世界示例包括以下内容:
- Instagram 的照片自动上传到 Twitter 账户。
- 连接的门铃配置为在响铃时在家中闪烁某些灯光。
- 将 GitHub 更新通知发送到 Slack 或 Discord 频道作为消息。
- 创建一个 Microsoft Teams 频道,当人们购买或出售某些股票时会转发消息。
优点和最佳实践
使用 Webhooks 的优势:
- 实时数据传输:Webhooks 在系统之间提供即时通信,允许在事件发生时立即交换数据。
- 效率:它消除了持续轮询的需求,降低了服务器负载并提高性能。
- 用户体验:即时更新增强了用户界面,使其更具响应性和动态性。
- 灵活性:Webhooks 可以根据不同事件触发特定操作,为应用程序交互提供定制化。
有效使用 Webhooks 的最佳实践:
- 安全连接:使用 HTTPS 确保通过 webhook 传输的数据是加密且安全的。
- 验证 Webhook:实施验证方法,例如验证数字签名,以确认传入数据来自可信来源。
- 错误处理:设计系统以优雅地处理失败,包括对失败的 webhook 传递重试和警报。
- 日志记录:保持 webhook 活动的详细日志,以便于调试并为数据流提供审计跟踪。
通过利用 webhooks 的优势并遵循这些最佳实践,开发人员可以为其应用程序创建高效且可靠的集成。
结论
Webhooks 具有实时、事件驱动的功能,在当今数字经济中是一种变革性工具。Webhooks 通过允许应用程序之间流畅自动地交流,加快了工作流程,提高了响应性,并促进了多个领域的效率。无论是用于持续集成,自动通知还是动态数据同步,Webhooks 减少了手动参与的需求,减少了错误并加快了过程。
- 源于:https://javascript.plainenglish.io/what-are-webhooks-d02e88b77359
相关文章:
Webhook 是什么?详解其工作原理
在现代技术中,一切都相互连接,每个应用程序通过许多服务的组合和协调实现无缝工作。这种协调是通过 webhooks 实现的。 Webhooks 是基于 HTTP 的回调函数,其中一个服务使用 API 立即通知另一个服务发生的事件。这就是简单的版本。从技术上讲…...
log4j2漏洞复现(CVE-2021-44228)
靶场环境 步骤一:设置出战规则 步骤二:开启靶场 cd vulhub cd log4j cd CVE-2021-44228 docker-compose up -d docker ps 访问端口 靶机开启 步骤三:外带注入 获得dnslog 靶机访问dnslog 得到dnslog的二级域名信息 步骤四:构造…...
tcpdump抓包分析
使用tcpdump进行抓包分析是一个常见的网络诊断和分析任务。以下是如何使用tcpdump进行抓包和分析的一些基本步骤和技巧: 1. 基本抓包 首先,你需要确定要抓取数据包的网络接口。可以使用ifconfig或ip addr命令查看网络接口。然后,使用以下命…...
LearnOpenGL学习(碰撞检测,粒子)
完整代码见:zaizai77/OpenGLTo2DGame: 基于OpenGL制作2D游戏 物体本身的数据来检测碰撞会很复杂,一半使用重叠在物体上的更简单的外形来检测。 AABB - AABB 碰撞 AABB代表的是轴对齐碰撞箱(Axis-aligned Bounding Box),碰撞箱是指与场景基…...
操作系统(24)提高磁盘I/O速度的途径
前言 操作系统提高磁盘I/O速度的途径多种多样,这些途径旨在减少磁盘访问的延迟和开销,提高数据传输的效率。 一、磁盘高速缓存(Disk Cache) 磁盘高速缓存是一种在内存中为磁盘数据设置的缓冲区,用于存储磁盘中某些盘块…...
C/C++基础知识复习(45)
1) C 中面向对象编程如何实现数据隐藏? 在 C 中,数据隐藏是通过将类的成员变量和方法的访问权限控制起来实现的。通常,数据隐藏是通过使用 访问控制 机制来实现的,C 提供了三种访问控制修饰符: private: 使成员变量和…...
现代C++锁介绍
文章目录 场景描述🐞 初始实现: 非线程安全版本互斥锁: std::mutex使用mutex保护共享资源使用std::lock_guard简化锁的管理 优化读操作: std::shared_mutex多个锁的管理: std::scoped_lock使用std::scoped_lock避免死锁 其他高级锁⏳ 带超时的锁: std::timed_mutex使…...
Squid代理服务器的安装使用
1.简介 Squid代理服务器是一种高效的中间服务器,位于客户端和目标服务器之间,起到了重要的网络中介作用。以下是对Squid代理服务器的详细介绍: 一、功能特点 缓存功能: Squid可以缓存经过它的请求和响应数据。当客户端发起请求时…...
爬虫学习案例8
爬取京东评论信息 采用DrissionPage自动化工具采集,感觉比Selenium工具好,真香。 安装第三方库 pip install DrissionPage pip install pandas pip install pyecharts pip install jieba pip install wordcloud1.安装DrissionPage库 DrissionPage安装…...
深入了解 CouchDB 的 Mango 查询:操作符和限制
CouchDB 是一个基于文档的数据库管理系统,支持 HTTP 协议,拥有强大的同步机制和灵活的数据模型。Mango 查询是 CouchDB 中用于数据检索的现代化查询接口,灵感来自 MongoDB 的查询语法。本文将深入探讨 Mango 查询中的各种操作符和限制,并提供详细的例子和说明,帮助你更好地…...
基于SSM(Spring + Spring MVC + MyBatis)框架搭建一个病人跟踪信息管理系统
基于SSM(Spring Spring MVC MyBatis)框架搭建一个病人治疗跟踪信息系统是一个相对复杂的项目,涉及到多个模块和功能。以下是一个简要的指导步骤。 1. 环境准备 开发环境:确保安装了Java Development Kit (JDK),建议…...
U盘文件名变乱码:原因、恢复与预防全解析
一、U盘文件名变乱码现象描述 在日常使用U盘进行数据传输和存储时,我们有时会遇到一个令人头疼的问题:U盘中的文件名突然变成了乱码,无法正常识别或访问。这些乱码文件名可能包含各种奇怪的字符和符号,使得原本有序的文件管理变得…...
EasyGBS国标GB28181公网平台P2P远程访问故障诊断:云端服务端排查指南
随着信息技术的飞速发展,视频监控领域正经历从传统安防向智能化、网络化安防的深刻转变。EasyGBS平台,作为基于国标GB28181协议的视频流媒体平台,为用户提供了强大的视频监控直播功能。然而,在实际应用中,P2P远程访问可…...
一网多平面
“一网多平面”是一种网络架构概念,具体指的是在一张物理网络之上,逻辑划分出“1N”个平面。以下是对“一网多平面”的详细解释: 定义与构成 01一网多平面 指的是在统一的物理网络基础设施上,通过逻辑划分形成多个独立的网络平面…...
animatediff 模型网盘分享
网盘 一、123网盘,不限速 https://www.123pan.com/s/ueQ8jv-OlzPh.html 网盘 网址 animatediff 国外网址https://huggingface.co/guoyww/animatediff/tree/cd71ae134a27ec6008b968d6419952b0c0494cf2 国内镜像在 https://hf-mirror.com/guoyww/animatediff/t…...
ansible play-book玩法
使用ansible-playbook实现安装nginx_ansible 安装nginx-CSDN博客文章浏览阅读1.5k次,点赞14次,收藏19次。本文详细介绍了如何在Linux环境中准备Ansible环境,包括配置主机、下载和安装Ansible,以及使用yum模块和tar包源码安装Nginx…...
MySQL索引-索引的分类和创建
索引类型 数据类型 B树索引Hash索引FullText全文索引 物理存储 聚簇索引二级索引 字段特性 主键索引唯一索引普通索引前缀索引 字段个数 单列索引联合索引 创建索引 创建表时一同创建创建表后单独创建创建表后通过修改表结构创建 可以通过 SHOW INDEX FROM test_table;查看…...
如何给负载均衡平台做好安全防御
在现代网络架构中,负载均衡(Load Balancing)扮演着至关重要的角色。它不仅负责将流量分配到多个服务器以确保高效的服务交付,还作为第一道防线来抵御外部攻击。为了保护您的应用程序和服务免受潜在威胁,必须对负载均衡…...
HR/TA/HRBP的关系
HR(人力资源)领域包含 TA(人才获取)和 HRBP(人力资源业务伙伴)这两个重要的角色,但它们只是 HR 工作的一部分分支,一般我们说的HR指TA。 1. 人才获取(TA) 定…...
Docker环境下MySQL数据库持久化部署全攻略
概述 在当今的软件开发领域,Docker容器技术已经成为应用部署和管理的新标准。它不仅简化了应用的部署流程,还为数据管理提供了灵活的解决方案。特别是在涉及到MySQL数据库时,数据持久化是一个不可忽视的重要环节。本文将分享如何在Docker中部…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
