Fastify 是一个快速和低开销的 Web 框架,适用于构建高效的 API。MongoDB 则是一个高性能、可扩展的文档数据库,为 Web 应用提供可靠的数据存储。本文将介绍如何结合使用这两个工具来构建可扩展、高可用的 API 应用。
环境准备
在开始构建应用前,需要安装 Node.js 和 MongoDB。使用以下命令安装:
# 安装 Node.js (MacOS 或 Linux) curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash nvm install node # 安装 MongoDB (MacOS 或 Linux) brew tap mongodb/brew brew install mongodb-community
创建 Fastify 应用
使用以下命令创建一个基本的 Fastify 应用:
npm init -y npm install fastify fastify-mongodb
创建一个 index.js
文件,并输入以下内容:
-- -------------------- ---- ------- ----- ------- - -------------------- ------- ---- -- ----- ----------- - ------------------------------ -------------------------------------------- - ---- -------------------------------- -- ------------------------- ----- ----- ------ -- - ----- ---------- - ------------------------------------ ----- ------ - ----- -------------------- --- ----------------------- -- ------ ------ -- -------------------- ----- -------- -- - -- ----- - ---------------------- --------------- - ------------------------ --------- -- ------------ --
该应用程序只有一个路由,用于检索 ID 为 :id
的用户,并从 MongoDB 数据库中检索相应的文档。
创建 Docker 容器
使用以下 Docker 命令创建 Docker 容器:
docker build -t api . docker run -d -p 3000:3000 --name api api
该命令会构建名为 api
的 Docker 镜像,并在端口 3000
上运行一个容器。
实现 API 限流
为了防止 API 流量超载和攻击,我们需要实现 API 限流。可以使用 fastify-rate-limit
插件来实现。
使用以下命令安装插件:
npm install fastify-rate-limit
更新 index.js
文件,以包括限流插件:
-- -------------------- ---- ------- ----- ------- - -------------------- ------- ---- -- ----- ----------- - ------------------------------ ----- --------- - ----------------------------- --------------------------- - ---- ---- ----------- -- ------- -- -------------------------------------------- - ---- -------------------------------- -- ------------------------- ----- ----- ------ -- - ----- ---------- - ------------------------------------ ----- ------ - ----- -------------------- --- ----------------------- -- ------ ------ -- -------------------- ----- -------- -- - -- ----- - ---------------------- --------------- - ------------------------ --------- -- ------------ --
该应用程序现在可以每分钟最多处理 100 个请求。如果超过此限制,则会返回 429
HTTP 响应代码。
实现 API 认证
为了保护 API 不受未授权访问,需要实现 API 认证。可以使用以下步骤实现:
- 安装
fastify-jwt
插件。 - 生成 JWT 密钥并将其存储为环境变量。
- 给应用程序添加一个路由,该路由需要 JWT 认证才能访问。
使用以下命令安装插件:
npm install fastify-jwt
生成 JWT 密钥并将其存储为环境变量:
export SECRET=my_secret_key
更新 index.js
文件以添加路由,并在需要 JWT 认证的路由上使用 fastify-jwt
插件:
-- -------------------- ---- ------- ----- ------- - -------------------- ------- ---- -- ----- ----------- - ------------------------------ ----- --------- - ----------------------------- ----- ---------- - ---------------------- --------------------------- - ---- ---- ----------- -- ------- -- ---------------------------- - ------- ------------------ -- -------------------------------------------- - ---- -------------------------------- -- ---------------------- ----- ----- ------ -- - -- ------------ ---- ----------- ----- ----- - ----- ------------------ ----- ---------- -- ------ - ----- - -- ------------------------- - -------------- ---------------------- -- ----- ----- ------ -- - ----- ---------- - ------------------------------------ ----- ------ - ----- -------------------- --- ----------------------- -- ------ ------ -- -------------------- ----- -------- -- - -- ----- - ---------------------- --------------- - ------------------------ --------- -- ------------ --
该应用程序现在具有 /login
路由,用于获取 JWT。只有具有有效 JWT 的用户才能访问 /users/:id
路由。
实现 API 缓存
为了加速 API 响应并减少数据库流量,可以将 API 响应缓存在 Redis 中。可以使用以下步骤实现:
- 安装
fastify-redis
插件。 - 将 Redis 配置为应用程序的缓存存储。
- 在需要缓存的路由上使用 fastify-caching 插件。
使用以下命令安装插件:
npm install fastify-redis fastify-caching
更新 index.js
文件以添加 Redis 插件,并将路由传递给 fastify-caching
插件:
-- -------------------- ---- ------- ----- ------- - -------------------- ------- ---- -- ----- ----------- - ------------------------------ ----- --------- - ----------------------------- ----- ---------- - ---------------------- ----- ------------ - ------------------------ ----- -------------- - -------------------------- --------------------------- - ---- ---- ----------- -- ------- -- ---------------------------- - ------- ------------------ -- -------------------------------------------- - ---- -------------------------------- -- ------------------------------ - ----- ----------- -- ------------------------- - -------------- ---------------------- -- ----- ----- ------ -- - ----- ---------- - ------------------------------------ ----- -------- - ------------------------ ----- ------------ - --------------------------- -- -------------- - ------ ------------------------ - ----- ------ - ----- -------------------- --- ----------------------- -- --------------------------- ----------------------- ------ ------ -- -------------------------------- ----------------- ------------------------- ----- ----- ------ -- - ----- -------- - ------------------------ ----- ------------ - - ---------- --- - ----- ------ - ----- ---------------------------- ------------- ----- -- -- - -- ----- ---- ---- ------- -- ------ ------ -- -------------------- ----- -------- -- - -- ----- - ---------------------- --------------- - ------------------------ --------- -- ------------ --
现在,路由 /users/:id
使用 Redis 缓存结果,而路由 /blogs/:id
使用 fastify-caching
插件缓存结果。
结论
该文章介绍了如何使用 Fastify 和 MongoDB 构建可扩展、高可用的 API ,包括:
- 创建 Fastify 应用
- 创建 Docker 容器
- 实现 API 限流
- 实现 API 认证
- 实现 API 缓存
通过使用这些技术,可以使应用程序更加可靠、可扩展,并提高 Web 服务的响应速度。希望这些指南能帮助读者更好地构建他们自己的 API 应用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6749309aa1ce006354462be2