什么是 WebHooks
WebHooks 是一种 Web 技术,它允许应用程序在某个事件发生时发送 HTTP 通知给另一个应用程序。通常,接收此通知的应用程序将执行某些操作。例如,一个 WebHooks 可用于在代码仓库上合并分支时触发构建过程。
WebHooks 由一个发送方和一个接收方组成。发送方通常是一个应用程序或服务,它维护它想要通知的事件类型列表。接收方即 WebHooks 接收器,它允许发送方向其发送 POST 请求,包含有关事件的详细信息。
使用 Fastify 构建 WebHooks 接收器
为什么选择 Fastify
Fastify 是一个快速和低开销的 Web 框架,它可以帮助我们轻松地构建 WebHooks 接收器。Fastify 提供了许多功能,例如支持异步处理、请求日志记录、可配置的路由处理和连接管理等,这些功能使 Fastify 成为构建高效 WebHooks 接收器的有力工具。
开始构建
首先,我们需要创建一个新的 Fastify 项目,并安装 fastify
包。
----- ---------------- -- ---------------- --- ---- --- ------- -------
Fastify 支持使用对象、函数和插件构建路由。我们将使用对象路由来构建我们的 WebHooks 接收器。
在项目根文件夹中创建一个名为 index.js
的文件,并添加以下代码:
----- ------- - -------------------- ----------------- ----- --------- ------ -- - ------------------------- ---------------- -- -------------------- ----- -------- -- - -- ----- - ------------------ --------------- - ------------------- --------- -- ------------ --
这将创建一个 Fastify 实例并注册一个处理 HTTP POST 请求的路由。我们在控制台上记录请求正文并发送一个响应。
解析请求正文
因为 WebHooks 请求通常具有 JSON 格式的负载,我们需要解析请求正文来访问事件对象。Fastify 内置了插件来帮助我们解析请求正文。我们可以使用以下命令安装 fastify-formbody
包:
--- ------- ----------------
在 index.js
文件顶部添加以下代码来启用插件:
---------------------------------------------
现在,在 post
路由处理程序中,我们可以通过 request.body
访问请求的 JSON 负载。接下来,我们将使用 GitHub WebHooks 做一个示例。
示例:在 GitHub 上使用 WebHooks
我们将创建一个在 repo 的 push 事件上触发构建过程的 WebHooks。让我们先在我们的构建服务器上设置一个简单的 bash 脚本来执行构建过程:
----------- ---- --------- ------- - ------- ------------ --- ----- --- --- ---- ---- -
接下来,在我们的 GitHub 代码仓库的 Settings
-> Webhooks
选项卡中创建一个新 WebHooks。
- Payload URL: 我们部署的服务器地址。在本例中为
http://localhost:3000
- Content type:
application/json
- Secret: 数据传输的加密签名密码。可以随意选择一个密码。(本示例中选择了
supersecret
) - Which events would you like to trigger this webhook?: 选择
Just the push event.
现在,我们需要将加密的密钥添加到我们的请求处理程序中,以保护我们的 WebHooks 免受恶意请求攻击。我们可以使用 crypto
模块和 Verify-Signature
headers 完成此操作。
----- ------ - ------------------ ----- ---------- - -------- -------- -- - ------ ------------------------- ------------------------------------------------------ -- ----------------- ----- --------- ------ -- - ----- ------ - -------------- ----- --------- - ----------------------------------- ----- ------- - ------------- ----- ---- - ------------------ --------- -- ------------------------- ----------------------- --------------------------- -- - ------ ----------------------- - -- ------------ --- -------------------- - ----- - ---- - - ------------------------- ------------------------- ----- ------- ------- -- - -- ----- - ------------------- ------ ----------------------- - -------------------- ---------------------- ------ ----------------- --- - ---------------- --
在我们的 post
路由处理程序中,我们首先使用 createHmac
函数创建一个加密的密钥,并使用 timingSafeEqual
函数比较请求中的密钥和加密的密钥。如果相等,接下来我们检查 payload.ref
是否等于 refs/heads/master
,如果是,则运行我们的构建脚本,并在控制台中记录输出。
现在,我们已经成功地构建了一个用于接收 WebHooks 通知的 Web 服务器。
总结
在本文中,我们介绍了 WebHooks 的概念,并展示了如何使用 Fastify 框架来构建 WebHooks 接收器。我们使用 fastify-formbody
插件来解析请求正文,使用 crypto
模块和 Verify-Signature
headers 来保护我们的 WebHooks 免受恶意请求攻击,并给出了一个基本的示例:使用 GitHub WebHooks 来触发构建过程。
当我们使用 WebHooks 时,我们需要牢记的一点是安全性和可靠性。如果我们的 WebHooks 配置不正确,可能会导致安全漏洞和其他不良后果。注意事项包括:仅允许来自受信任的源的请求,使用加密签名运输敏感数据等。
我希望本文有助于您了解如何构建安全、高效的 WebHooks 接收器,并有助于您在将来的工作中解决类似的问题。如果您对 Fastify 有更多的兴趣,您可以浏览 Fastify 文档,了解更多内容。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64ae46a148841e9894a44c11