API 网关是现代应用程序中的必备组件,用于将前端和后端之间的交互抽象出来,并提供了很多有用的特性,如路由、负载平衡、JWT 签名等。Fastify 是一个快速、低开销、真正的轻量级开源框架,它是构建高效的 API 网关的理想选择。
本文将介绍如何使用 Fastify 构建 API 网关,并探讨一些有趣的技术细节。让我们开始吧!
安装及基本配置
首先,我们需要创建一个新项目,并安装 Fastify。在终端中使用以下命令:
mkdir my-api-gateway && cd my-api-gateway npm init -y npm install fastify --save
我们需要创建一个名为 server.js
的文件,以配置和启动 Fastify。将以下代码复制粘贴到新文件中:
const fastify = require('fastify')() fastify.listen(3000, err => { if (err) throw err console.log(`server listening on ${fastify.server.address().port}`) })
这将创建一个 Fastify 实例,并在端口 3000
上启动我们的 API 网关。现在,我们可以运行 npm start
让应用程序启动。
node server.js
运行上述命令后,我们应该看到以下输出:
server listening on 3000
现在我们已经设置了一个基本的 Fastify 服务,接下来我们需要添加路由配置,以及编写路由的处理函数。
路由配置
为了添加路由,我们需要在 Fastify 实例上使用 route
方法。以下是一个RESTful 风格的路由配置示例:
-- -------------------- ---- ------- --------------- ------- ------ ---- ---- -------- ----- --------- ------ -- - ------ - ------ ------- - - -- --------------- ------- ------ ---- --------- -------- ----- --------- ------ -- - ------ - ------ -- ----- ------- -- - ----- ----- -- - - -- --------------- ------- ------ ---- ------------- -------- ----- --------- ------ -- - ------ - ----- - --- ------------------ ----- ------- - - - -- --------------- ------- ------- ---- --------- -------- ----- --------- ------ -- - ------ - -------- ----- -------------------- --------- - - --展开代码
我们创建了四个路由。第一个是 /
,返回一个表示“hello world”的 JSON 对象。接下来两个路由开始使用参数(如/users/1
),并返回一些数据。最后一个路由是一个带有JSON体的POST请求,这将用来添加一个新用户。
请求处理
现在我们已经有了路由配置,我们需要为每个路由编写一个处理函数。处理函数只需要返回从数据库、文件系统或其他源检索的数据。例如,以下是/users/:id
路由的处理函数实现:
-- -------------------- ---- ------- ----- ----- - - - --- -- ----- ------- -- - --- -- ----- ----- - - --------------- ------- ------ ---- ------------- -------- ----- --------- ------ -- - ----- - -- - - -------------- ----- ---- - ------------ -- ---- --- ------------ ---- -- ------- - ------ ------------------------ ------ ----- --- ------ -- - ------ - ---- - - --展开代码
这是一个非常基本的示例,它仅仅是从一个名为 users
的数组中查找一个用户。实际项目中我们需要连接数据库或API等真实的数据源。
如果找不到指定的用户,则使用 404
HTTP 状态码返回一个 JSON 响应体,包含描述错误的消息。
JWT鉴权
实现 JWT 鉴权是保护 API 网关的一个非常重要的考虑因素。让我们来看一下如何基于 Fastify 实现 JWT 鉴权。
-- -------------------- ---- ------- ----- ---------- - ---------------------- ----- ---------- - -------------------- ---------------------------- - ------- ---------- -- --------------- ------- ------ ---- ------------- ----------- -------------- ----------------- --- -------- ----- --------- ------ -- - ------ - -------- ------ --------- ------ - - --展开代码
我们使用 fastify-jwt
插件来支持 JWT 验证,首先需要在网关中使用 register
方法注册该插件,然后我们定义了一个受保护的路由 /protected
,这只能由持有有效 JWT 的请求访问。在路由上使用 preHandler
配置项启用了鉴权处理程序,它调用 fastify.auth
和 fastify.verifyJWT
管道。
JWT 是由客户端通过将其包含在请求的 header 或 payload 中进行签名的。在我们的 Fastify 实例配置中,SECRET_KEY
会作为加密秘钥与 JWT 一起发送到客户端,从而确保只有持有该秘钥的授信受信任,能够验证 JWT 签名是否正确。
总结
在这篇文章中,我们介绍了如何使用 Fastify 构建 API 网关,讨论了路由配置、请求处理和 JWT 鉴权。Fastify 是一个快速、高效、真正的轻量级开源框架,为开发人员构建高效 API 网关提供了一个理想的选择。我们鼓励您尝试使用 Fastify 来构建自己的 API 网关,并从中获得更好的开发体验。
如果您想深入了解更多有关 Fastify 的内容,可以访问官方 Fastify 官方网站。
代码仓库示例:使用 Fastify 构建 API 网关
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64675438968c7c53b07b8c18