简介

在学习新技术时,有三个重要的问题很突出:whatwhy 和_how_。在之前的文章中,我们彻底了解了_what_ webhook 是什么以及_为什么_ 你需要它们。 Webhook 是用户定义的 HTTP 回调,可用于在两个独立的在线应用程序之间建立通信。当一个应用程序中发生事件时,该应用程序可以使用 webhook 将有关事件的通知与事件数据一起发送到另一个应用程序。

webhook 的工作原理

Webhook 通信是通过从源应用程序向目标应用程序发送 HTTP 请求来实现的。当源应用程序中发生事件时,将触发可能包含与您相关的数据的 HTTP 请求。此 HTTP 请求被发送到目标应用程序的端点。这是目标应用程序提交给源应用程序的端点,用于发送 Webhook 请求。端点通常称为 webhook URL。

[Alt](https://res.cloudinary.com/practicaldev/image/fetch/s--JnPQNkJp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/uploads/articles/1rrg41v1ijmpsnqpr1ph.png)

可以使用 POST 或 GET 请求方法发送 Webhook 请求。这取决于 webhook 提供者的偏好——提供者的文档中始终提供有关如何使用请求的信息。下一部分提供了有关如何从提供者的文档中找到有关 webhook 的正确信息的更多详细信息。

如何阅读 webhook 的文档

对于大多数开发人员来说,浏览技术文档并不被认为是一项充满乐趣的练习,来自 webhook 提供商的文档也不例外。我在尝试从不同提供商的 webhook 文档中找到适当的信息时遇到了相当大的挫折,所以让我分享一些我多年来使用 webhook 发现的有用技巧。

  • 查找 Developers 部分: Webhook 是 webhook 提供程序的编程接口的一部分,因此您很可能会在提供程序网站的此部分中找到有关 webhook 的文档。

  • 使用搜索栏: 大多数文档都有搜索功能,您可以使用它通过正确的关键字快速找到所需的信息,例如“webhook events*”。*

  • 检查事件类型: 事件是 webhook 的主要关注点。了解事件类型将帮助您了解可以订阅的事件。例如,电子商务网站可以允许订阅事件,例如将商品添加到购物车、购买商品等。

  • 查找有关 webhook 安全性的信息: Webhook 请求是常规 HTTP 请求,因此容易受到 HTTP 请求面临的所有安全威胁。您想检查有关提供商 webhook 安全性的信息,例如 IP/域白名单、身份验证令牌、API 密钥等。

  • 速率限制和重试: 就像常规 HTTP 请求一样,Webhook 请求可能会失败,您还需要考虑 API 接收请求的可伸缩性。因此,有关最大并发请求数以及是否可以配置该值的信息很重要。您还想知道提供者是否会自动重试失败的请求,如果没有,您可能需要设置自己的系统来实现这一点。

教程:如何使用 Stripe 设置 webhook

现在我们已经掌握了大量的 webhook 知识,让我们通过使用Stripewebhook 的练习将这些知识付诸实践。 Stripe 是一个易于设置的电子支付网关,为 Web 应用程序提供支付基础设施。第一步是注册一个 Stripe 帐户并注册 Stripe webhook,以便在演示Node.js服务器上接收 webhook 请求。

从 Stripe 文档中获取关键信息

首先,我们需要扎实的 Stripe webhook 知识库,我们可以使用Stripe 文档获得这些知识库。有关 webhook 的信息可以在Developer Tools → Webhooks的文档中找到。

在这里,您可以找到有关使用不同编程语言的信息,检查 Stripe验证签名进行身份验证,Stripe webhook 集成最佳实践,甚至示例集成。

创建Stripe账户

目前,注册 Stripe 帐户只需要一个电子邮件地址。前往Stripe 注册页面设置新帐户。注册后,您将需要验证您的电子邮件地址。

克隆 Node.js API

设置好 Stripe 帐户后,下一步就是克隆演示 Node.js API。我们将使用的 API 可在Hookdeck 的 GitHub 存储库上找到。通过运行以下命令克隆此存储库:

git clone https://github.com/hookdeck/nodejs-webhook-server-example.git

进入全屏模式 退出全屏模式

这将使项目在您运行命令的文件系统上的位置可用。

导航到项目的根目录并通过运行以下命令安装所需的依赖项:

cd nodejs-webhook-server-example
npm install

进入全屏模式 退出全屏模式

安装完成后,您可以使用以下命令运行 Node.js 服务器:

npm start

进入全屏模式 退出全屏模式

这将启动 API 应用程序并在屏幕上打印一条消息,指示 API 现在正在运行并侦听端口1337上的连接。

用于 webhook 请求的端点是/stripe-webhooks-endpoint,可以在routes.js文件中找到,如下所示:

router.post("/stripe-webhooks-endpoint", bodyParser.raw({type: 'application/json'}), function(req, res) {
  console.log(req.body);
  res.send("Stripe Successfully received Webhook request");
});

进入全屏模式 退出全屏模式

此端点接收 webhook 请求,将请求正文打印到控制台,并返回一条消息。

获取webhook URL

为了让源应用程序发送 webhook 请求,目标应用程序需要向源注册一个 webhook URL。大多数 webhook 提供商还要求此端点出于安全原因使用HTTPS协议。因此,我们需要一个使用 HTTPS 的可公开访问的 URL。

幸运的是,Hookdeck CLI就是为此而构建的。使用 Hookdeck CLI,您可以在本地接收 webhook 并无缝调试它们。访问CLI 文档在您的操作系统上安装和设置该工具。

设置过程完成后,下一步是使用 CLI 生成指向正在运行的 API 应用程序的 webhook URL。为此,请运行以下命令:

hookdeck listen 1337

进入全屏模式 退出全屏模式

此命令启动一个交互式会话,CLI 在其中收集有关您将要创建的端点的信息。以下是您应该为每个问题提供的问题和答案。确保在每次回答后按Enter键。

  • 选择一个来源? 并且:选择创建新来源

  • 您的新源标签应该是什么? 并且:输入文本 stripe

  • 应该将 webhook 转发到哪个路径(即:/webhooks)?答案:输入 /stripe-webhooks-endpoint

  • 什么是连接标签(即:我的 API)? 并且:类型 _My Stripe API

使用此信息,CLI 将开始生成 URL 的过程,一旦完成,您将看到 URL 打印到屏幕上,并且 CLI 指示它已准备好接收请求。

复制 webhook URL,因为下一部分将需要它。

在 Stripe 上设置 webhook

现在我们已经完成了目标应用程序的设置,是时候在 Stripe 上订阅一个 webhook。

在您的 Stripe 仪表板上,转到 Developers → Webhooks。在“Webhooks”页面上,单击屏幕右上角的+ Add endpoint**** 按钮。此操作将弹出一个类似于下图的对话框:

[Alt](https://res.cloudinary.com/practicaldev/image/fetch/s--WgR2WrI6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/uploads/articles/qjcxo43fwp7rffiwgez1.png)

在对话框中,将从 CLI 复制的 webhook URL 添加到Endpoint URL字段中。接下来,单击Events to send下拉菜单并选择account.updated事件,每次更新您的 Stripe 帐户时都会触发该事件。单击Add endpoint按钮完成此过程。

这将在您的 Stripe 帐户和本地计算机上运行的 API 应用程序之间为account.updated事件创建连接。成功添加 webhook 后,您将看到如下所示的屏幕:

[Alt](https://res.cloudinary.com/practicaldev/image/fetch/s--BKLr9yLO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/uploads/articles/xtug90g9y0j4rjm6w6q5.png)

测试 webhook 请求

设置好我们的 webhook 连接后,现在是测试它的时候了。 Stripe 提供了一种发送模拟您注册的事件的测试 webhook 的方法。这对于测试和调试目的非常方便。

在上面显示的 webhook 屏幕的右上角,单击Send test webhook按钮。这将弹出一个对话框,供您选择要发送测试的事件。请参阅下面的对话框:

[Alt](https://res.cloudinary.com/practicaldev/image/fetch/s--HoqFlqrS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/uploads/articles/0q9ka595dg46q5s14kmn.png)

确保选择account.updated事件并单击Send test webhook按钮。这将触发对您的 webhook URL 的 webhook 请求,该请求将在您创建 URL 时指定的端点(即/stripe-webhooks-endpoint)接收。

观察运行hookdeck listen 1337命令的终端窗口。您将看到打印到终端的 webhook 请求,如下所示:

[Alt](https://res.cloudinary.com/practicaldev/image/fetch/s--pHbXRrYM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/uploads/articles/sjw6k1murtxbxc1sijce.png)

打印信息中的最后一项是一个端点,您可以查看有关刚刚收到的 webhook 请求的详细信息。复制此 URL 并将其加载到浏览器中,您将看到如下所示的事件详细信息屏幕。

[Alt](https://res.cloudinary.com/practicaldev/image/fetch/s--SCrt5rEZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/uploads/articles/tclturl9vnnr7bwlok2h.png)

此屏幕包含有关 webhook 请求的详细信息以及在有效负载中发送的请求正文(如果有)。

这将使您能够检查请求数据并编写代码来响应它。

使用 webhook 时的重要注意事项

Webhook 是一种简单的通信设置,正因为如此,人们可能会倾向于轻视这个过程。但是,在使用 webhook 时需要考虑一些非常重要的事情,其中一些将在下面解释。

  • **可扩展性:**订阅的事件越多,收到的请求越多,部分事件为高频事件。在使用 webhook 时,突然目睹流量激增的情况并不少见。如果您的端点不堪重负,来自高频事件的 Webhook 请求突然激增最终可能会关闭您的服务器。解决此问题的方法之一是通过异步处理与消息队列,或使用在线服务,如Hookdeck。

  • 请求失败: 大多数 webhook 请求都遵循 fire-and-forget 过程,即在发送请求时没有源确认它是否成功到达目的地。因此,如果您的端点发生错误并且未重试 webhook 请求,则该数据可能会丢失。这可能会对系统的完整性产生一些破坏性后果。您希望确保重试失败的请求,并且请求数据在重试之间保持不变。一些提供商在从目标应用程序收到错误状态代码时会自动执行此操作。在提供商不提供此功能的情况下,您需要对其进行设置。

  • 安全性: 如前所述,webhook 请求是常规的 HTTP 请求,因此您要注意对发送到服务器的请求进行身份验证。一些提供商,如 Stripe,在标头中嵌入了 API 密钥和安全签名,供您验证您的请求。

结论

Webhook 为在线应用程序提供了一个无缝的实时通信系统。应用程序可以相互通知和共享发生的事件信息,并形成一系列自动化工作流程,为自己和用户带来更多价值。在本文中,我们展示了如何使用 Stripe webhook 作为案例研究来使用 webhook。大多数 webhook 提供者都遵循非常相似的过程,不同之处仅出现在请求的形式上。因此,您可以将您在本文中获得的知识转移到您与其他 webhook 提供商的工作中。快乐编码!

Logo

CI/CD社区为您提供最前沿的新闻资讯和知识内容

更多推荐