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

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.kler.cn/a/450122.html

相关文章:

  • WebRTC服务质量(08)- 重传机制(05) RTX机制
  • Gin-vue-admin(1):环境配置和安装
  • SQL,生成指定时间间隔内的事件次序号
  • springboot中使用gdal将表中的空间数据转shapefile文件
  • Leetcode 3393. Count Paths With the Given XOR Value
  • 【恶意软件检测】一种基于API语义提取的Android恶意软件检测方法(期刊等级:CCF-B、Q2)
  • 日文医学论文如何翻译
  • EMQX构建简易的云服务
  • 节日需求激增:如何抓住家居用品和圣诞装饰品市场的商机?
  • Scala——身份证号码查询籍贯
  • ASP.NET |日常开发中常见问题归纳讲解
  • Nginx限速原理、配置与测试
  • 插入块(数据库)、预览图 错误调试
  • python 定时任务管理封装
  • 【js】URL处理
  • 快手后端面试,被面试官秒挂了!
  • HEX文件格式详解
  • flask-admin modelview 中重写get_query函数
  • oracle怎样使用logmnr恢复误删除的数据
  • 优化 HTTP 接口请求:缓存策略与实现方法
  • Leetcode1705:吃苹果的最大数目
  • Jetson xavier 刷机安装教程
  • new 分配空间;引用
  • 电气设计 | 低压接地系统:TN-C 、TN-S、TN-C-S、TT适用哪些场所?
  • vue中proxy代理配置(测试二)
  • 大模型面试快问快答