当前位置: 首页 > 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
http://www.lryc.cn/news/508827.html

相关文章:

  • log4j2漏洞复现(CVE-2021-44228)
  • tcpdump抓包分析
  • LearnOpenGL学习(碰撞检测,粒子)
  • 操作系统(24)提高磁盘I/O速度的途径
  • C/C++基础知识复习(45)
  • 现代C++锁介绍
  • Squid代理服务器的安装使用
  • 爬虫学习案例8
  • 深入了解 CouchDB 的 Mango 查询:操作符和限制
  • 基于SSM(Spring + Spring MVC + MyBatis)框架搭建一个病人跟踪信息管理系统
  • U盘文件名变乱码:原因、恢复与预防全解析
  • EasyGBS国标GB28181公网平台P2P远程访问故障诊断:云端服务端排查指南
  • 一网多平面
  • animatediff 模型网盘分享
  • ansible play-book玩法
  • MySQL索引-索引的分类和创建
  • 如何给负载均衡平台做好安全防御
  • HR/TA/HRBP的关系
  • Docker环境下MySQL数据库持久化部署全攻略
  • 如何查看pad的console输出,以便我们更好的进行调试,查看并了解实际可能的问题。
  • react中使用ResizeObserver来观察元素的size变化
  • Linux快速入门-Linux文件系统管理
  • 漏洞检测工具:Swagger UI敏感信息泄露
  • VSCode如何修改默认扩展路径和用户文件夹目录到D盘
  • 【超详细实操内容】django的身份验证系统之限制用户访问的三种方式
  • AI芯片常见概念
  • Linux 中 epoll 的详解
  • 增加nginx配置文件(conf.d), 管理多个项目
  • PostgreSQL编译安装教程
  • 【提审】Android包提审报权限问题