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

Webhook 是什么?详解其工作原理

在现代技术中,一切都相互连接,每个应用程序通过许多服务的组合和协调实现无缝工作。这种协调是通过 webhooks 实现的。

Webhooks 是基于 HTTP 的回调函数,其中一个服务使用 API 立即通知另一个服务发生的事件。这就是简单的版本。从技术上讲,根据最早概念化 webhooks 的 Jeff Lindsay 的说法,webhooks 是 “使用 HTTP 进行的用户定义回调”。

Webhooks 的基础知识

以下是 webhooks 的基础知识:

  • 事件驱动聊天: 应用程序可以使用 webhooks 在特定事件发生时互相聊天,而不是不断检查,比如新客户订单或朋友的生日。
  • 推送通知,无需等待: 不用刷新页面即可看到更新。Webhooks 就像接收通知一样——应用程序在重要事件发生时立即通知另一个应用程序。这样更快捷,节省时间。
  • 带详细信息的 Web 消息: Webhooks 使用 web 调用发送消息。这些消息包括简短的报告,例如 JSON 格式 的常见新闻更新,通知发生了什么。
  • 实时更新: 由于 webhooks 立即提供信息,应用程序可以立即保持互相之间的最新状态。

Webhooks的工作原理?

  1. 事件发生: 事件触发 webhook 过程。这个事件可以是任何内容,从网站上新客户注册到商店存货水平的变化等。
  2. HTTP POST: 事件触发后,将向指定的 URL 发送 HTTP POST 请求,即 webhook URL。此 URL 指向一个专门设计用于接收和处理这些 webhook 通知的 Web 服务器。
  3. 触发 Webhook: 接收 HTTP POST 请求 后,webhook 会在 Web 服务器上触发。
  4. 通知: 然后,webhook 服务器解析包含在 HTTP POST 请求中的数据。这些数据通常包含触发 webhook 事件的详细信息。
  5. 接收和处理请求: 然后,webhook 服务器验证请求的真实性并相应处理数据。
  6. 采取行动: 最后,根据从事件接收的数据,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中部…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

什么是EULA和DPA

文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

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…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键&#xff…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...