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