首页 > 解决方案 > 如何为个人项目创建 webhook?(JavaScript,节点)

问题描述

我最近了解了 webhook,并正在尝试为我正在构建的全栈应用程序实现一个。但是,我无法找到有关如何创建自己的 webhook 的信息。这就是我的应用程序的预期工作方式:

我的客户端是一个使用 React 构建的网站,当它加载时,它会向我的服务器(使用 Node 和 Express 构建)发出 GET 请求。响应将提供将显示在网站上的数据。用户将单击网站上的一个按钮,该按钮将向我的服务器发送一个(POST?GET?)请求,该服务器将发出自己的 POST 请求以将一些数据发送到外部 API。当该外部 API 数据完成对数据的处理时,它将向我的 webhook URL(我假设它是我的服务器的一部分)发送一个 POST 请求,并且需要将来自外部 API 的数据发送到客户端,客户端将显示它与原始数据一起。此外,当第一批数据的工作完成后,我的服务器向外部 API 发送另一个 POST 请求(包含更多原始数据),

据我了解,webhook 将允许我的客户端向我的服务器发出单个请求,然后,我的服务器可以对我的客户端做出多个响应:从外部 API 接收到的每个 POST 请求一个响应。但是,我无法找到有关如何创建 webhook 的信息。我发现的所有内容都是关于如何将 webhook 与预先存在的应用程序/网站(如 Discord、GitHub 或 Stripe)一起使用。或者使用 3rd-party 服务来使用他们的 webhook 连接预先存在的应用程序/网站。

我如何为我的小项目制作一个 webhook,每当我的服务器收到来自外部 API 的 POST 请求时,它都会更新我的网站?还是我误解了 webhook 的工作原理?它们只能由 3rd 方服务创建和/或仅用于预先存在的应用程序吗?

标签: javascriptnode.jswebhooks

解决方案


对于一个简单的用例,它只是意味着您服务器上的另一个端点,当它完成任务时将接收来自外部 API 的请求。REST API 的一种常见方式是让您知道它们已经完成了某些事情,或者通常将任何事情反馈给您。您有一个端点将接收来自 React 客户端的请求,并将信息发送到外部 API(如您所说),另一个端点(此“webhook”)将从外部 API 接收请求。而已。

您很好地描述了此问题的客户端-服务器通信,但服务器无法通过 HTTP 向客户端发送请求。如果客户端需要来自服务器的任何东西,它需要发送一个请求并请求它。一种常见的方法是在外部 API 命中您的“webhook”后将信息存储在服务器上,并且客户端可以询问服务器数据是否每 X 秒返回一次(长轮询)。

示例(支付流程):

Client -> Server: Heres my credit card number
Server -> Client: Thanks! Let me process that.

Server -> External API: Please process this credit card for the amount of $X and ping me at this webhook when you're done.
External API -> Server: OK, will let you know when I'm done.

Client -> Server: You done yet?
Server -> Client: Nope!

External API -> Server (to webhook): Hey, I'm done, here's the receipt.
Server -> External API: Thanks!

Client -> Server: You done yet?
Server -> Client: Yes! Here's your receipt.

解决该问题的更高级方法是使用长寿命的双向通信协议,例如 websockets。正如其他人所提到的,所有端点不必位于同一台服务器上。您可以为每个端点拥有一台服务器,并且您可以仅在它们收到请求然后重新进入睡眠状态时才打开它们(即 Lambda)。这种方法的优点和缺点。那是更高级的东西,如果你只是在学习,我现在不会真的担心它。


推荐阅读