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

第 4 步:  选择触发 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 减少了手动参与的需求,减少了错误并加快了过程。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐