什么是 Webhooks?
Webhooks 是一种自动化通知机制,通过 HTTP 请求从其他应用程序向你的应用程序发送数据,实现两个应用程序之间的信息交流。比如,当某个 Github 仓库有新的提交时,Github 会向指定的 URL 发送 HTTP 请求,你的应用程序就能获取到该提交的详情,进行相关的处理。
Webhooks 的应用场景
Webhooks 的应用场景非常广泛,比如:
- 实时更新信息:比如社交网络应用程序,可以通过 Webhooks 实时获取用户发布的内容。
- 自动同步数据:比如企业内部系统和电商平台之间,通过 Webhooks 实时同步订单信息。
- 自动化部署:比如将代码仓库和服务器进行绑定,当仓库有新的提交时,服务器可以自动部署最新代码。
Webhooks 的实现需要有一个接收 HTTP 请求的服务端程序,这里我们使用 Express.js。下面给出一个简单的示例代码:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ---------- - ----------------------- ----- --- - ---------- -- -- ----------- --- --------------------------- -- -- -------- --- ---------------------------- ----- ---- -- - ----------------- ------ - -------- ----- ---------------------- ------------ -------- ----- --- -- -- ------- ---- ---------------- -- -- - -------------------- ------ --------- -- ---- ------- ---
代码说明:
- 首先引入
express
和body-parser
模块。 - 创建一个 Express 应用程序实例。
- 配置
body-parser
中间件,用于解析 HTTP 请求体中的 JSON 格式数据。 - 定义 Webhooks 的路由,接收 POST 请求,并输出请求体中的内容。
- 启动 Express 应用程序,监听 3000 端口。
Webhooks 的安全性问题
考虑到 Webhooks 的安全性问题,我们需要对接收到的 HTTP 请求进行验证,确认请求是否来自合法的源,请求中的数据是否被篡改。常用的验证方式包括:
- 通过 SSL/TLS 协议建立加密通道,保证数据传输过程中的安全性。
- 对请求头中的
X-Hub-Signature
字段进行验证,确认请求是否来自 Github,并且请求中的数据是否被篡改。
下面给出加密签名的验证示例代码:
-- -------------------- ---- ------- ----- ------ - ------------------ -- ---- -------- -------------------- ---- ----- - ----- ------- - ------------------------- -- ---------- - ------ ------------- ---- -- -------- - ----- ------ - ------------------ -- ---------- ----- --------- - --------------------------- ----- ---- - ------------------------- -------- ----- ------ - ------------------- - ----------------------------------- -------- ----- -------- - ---------------------- -------- -- ---------------- --- ------------- -- ------------------------------- ---------- - ------ ------------- ------------ - ------ ------- - -- -- -------- -- ---------------------------- ---------------- ----- ---- -- - ----------------- ------ - -------- ----- ---------------------- ------------------------ -------- ----- ---
代码说明:
- 引入
crypto
模块,用于计算 HMAC 值和比较字符串是否相等。 - 定义一个验证签名的中间件函数
verifySignature
,计算请求体中的 HMAC 值,比较请求头中的签名和计算出的 HMAC 值是否相等,如果相等则表示请求来自 Github,否则抛出Invalid signature
。 - 在 Webhooks 的路由中,通过
verifySignature
中间件进行签名验证,如果通过验证则输出请求体中的内容。
总结
以上是介绍了如何在 Express.js 中使用 Webhooks,Webhooks 的应用场景非常广泛,需要注意保障其安全性。希望本文能给大家带来一些有用的指导和帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64c9edb05ad90b6d04189bba