在现代 Web 应用程序中,WebHooks 是极其常见的一种技术,用于实现异步事件触发和处理。WebHooks 可以帮助我们轻松地处理所有类型的异步事件,如 Github 仓库的提交、订阅用户的操作、支付完成后的回调等。在本文中,我们将介绍使用 Deno 处理 WebHooks 的最佳实践。
什么是 Webhooks?
WebHooks 是一种能够利用 HTTP 请求实现异步事件触发和处理的技术。具体来说,当某个特定事件发生时,服务端会发出 HTTP POST 请求,向预先设置好的 WebHooks 地址发送请求,以便客户端应用程序能够获取到这些事件。
WebHooks 可以对实现异步事件触发和处理的应用程序提供帮助,这是接口系统等传统方式所不能实现的。
Deno 中处理 WebHooks 的最佳实践
为了实现在 Deno 中处理 WebHooks,我们需要创建一个 HTTP 服务器来接收异步事件的请求,并处理这些请求,然后响应可以将结果返回到客户端应用程序。
以下是如何使用 Deno 编写一个简单的 Webhooks 服务器的示例代码:
// www.javascriptcn.com code example
import { serve } from "https://deno.land/std/http/server.ts";
const server = serve({ port: 8080 }); // 创建一个 HTTP 服务器,监听端口 8080
console.log("listening on port 8080");
for await (const req of server) {
const body = await Deno.readAll(req.body); // 读取请求主体
const payload = JSON.parse(new TextDecoder().decode(body)); // 解析请求主体为 JSON 格式
console.log(`Incoming payload: ${JSON.stringify(payload)}`); // 控制台输出解析后的 JSON 数据
req.respond({ body: "Webhook received" }); // 响应客户端请求
}如上所示,我们使用 Deno 的 std/http/server.ts 模块来创建一个 HTTP 服务器,然后监听端口 8080。在何时监听到请求时,我们会读取请求的主体,解析 JSON 数据,输出解析后的数据,然后回复客户端请求。这个非常简单的示例可以让你开始处理 WebHooks 事件的基础步骤。
如何验证 WebHooks 的来源
在实际使用中,我们必须验证 WebHooks 的来源,否则可能导致恶意请求,从而破坏应用程序的安全。
为了验证 WebHooks 的来源,我们可以使用 Github WebHooks 提供的 HMAC 私钥。请注意,我们使用的是 Github WebHooks 作为示例,但是这种方法可用于任何需要验证 WebHooks 来源的应用程序。
以下是一个简单的验证 WebHooks 来源的示例代码:
// www.javascriptcn.com code example
import { hmac } from "https://deno.land/std/hash/mod.ts";
const SECRET = "your_webhook_secret"; // 你在 Github WebHooks 设置界面指定的 secret
async function handleWebhook(payload: any, signature: string) {
const hmacSignature = "sha1=" + hmac("sha1", SECRET, new TextEncoder().encode(payload), "utf8", "hex");
if (signature.localeCompare(hmacSignature) !== 0) {
throw new Error("Invalid signature");
}
console.log(`Incoming payload: ${payload}`);
}
// 这里我们假设已经接收到了 Github WebHooks
const signature = "sha1=ae4f785ad12cb95fae5e5d5e719a3c3f540deaec"; // 从 Github WebHooks 请求标头中获取
await handleWebhook("payload data", signature);在此示例中,我们使用 Deno 中的 std/hash/mod.ts 模块的 hmac() 函数计算出一个 HMAC 加密签名。这个函数的第一个参数是哈希算法的名称,第二个参数是我们通过 Github WebHooks 设置指定的密钥。后面的参数是要签名的数据,签名算法和输出格式。最后我们比较签名和来自请求标头中的签名是否匹配。如果签名不匹配,则抛出一个异常以表示一个不可信的请求。
最后
在 Deno 中处理 WebHooks 的最佳实践是一个非常简单但广泛使用的主题,具有深度和指导意义。我们在本文中提供了一些用于处理 WebHooks 的基本示例代码,还介绍了如何验证 WebHooks 的来源。你现在可以开始编写你自己的 WebHooks 服务器,以便跟踪你所关心的异步事件了。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d02164e46428fe9ecc3a1d