如何使用 Fastify 和 MongoDB 构建可扩展、高可用的 API

阅读时长 10 分钟读完

Fastify 是一个快速和低开销的 Web 框架,适用于构建高效的 API。MongoDB 则是一个高性能、可扩展的文档数据库,为 Web 应用提供可靠的数据存储。本文将介绍如何结合使用这两个工具来构建可扩展、高可用的 API 应用。

环境准备

在开始构建应用前,需要安装 Node.js 和 MongoDB。使用以下命令安装:

创建 Fastify 应用

使用以下命令创建一个基本的 Fastify 应用:

创建一个 index.js 文件,并输入以下内容:

-- -------------------- ---- -------
----- ------- - -------------------- ------- ---- --
----- ----------- - ------------------------------

-------------------------------------------- -
  ---- --------------------------------
--

------------------------- ----- ----- ------ -- -
  ----- ---------- - ------------------------------------
  ----- ------ - ----- -------------------- --- ----------------------- --
  ------ ------
--

-------------------- ----- -------- -- -
  -- ----- -
    ----------------------
    ---------------
  -
  ------------------------ --------- -- ------------
--

该应用程序只有一个路由,用于检索 ID 为 :id 的用户,并从 MongoDB 数据库中检索相应的文档。

创建 Docker 容器

使用以下 Docker 命令创建 Docker 容器:

该命令会构建名为 api 的 Docker 镜像,并在端口 3000 上运行一个容器。

实现 API 限流

为了防止 API 流量超载和攻击,我们需要实现 API 限流。可以使用 fastify-rate-limit 插件来实现。

使用以下命令安装插件:

更新 index.js 文件,以包括限流插件:

-- -------------------- ---- -------
----- ------- - -------------------- ------- ---- --
----- ----------- - ------------------------------
----- --------- - -----------------------------

--------------------------- -
  ---- ----
  ----------- -- -------
--

-------------------------------------------- -
  ---- --------------------------------
--

------------------------- ----- ----- ------ -- -
  ----- ---------- - ------------------------------------
  ----- ------ - ----- -------------------- --- ----------------------- --
  ------ ------
--

-------------------- ----- -------- -- -
  -- ----- -
    ----------------------
    ---------------
  -
  ------------------------ --------- -- ------------
--

该应用程序现在可以每分钟最多处理 100 个请求。如果超过此限制,则会返回 429 HTTP 响应代码。

实现 API 认证

为了保护 API 不受未授权访问,需要实现 API 认证。可以使用以下步骤实现:

  1. 安装 fastify-jwt 插件。
  2. 生成 JWT 密钥并将其存储为环境变量。
  3. 给应用程序添加一个路由,该路由需要 JWT 认证才能访问。

使用以下命令安装插件:

生成 JWT 密钥并将其存储为环境变量:

更新 index.js 文件以添加路由,并在需要 JWT 认证的路由上使用 fastify-jwt 插件:

-- -------------------- ---- -------
----- ------- - -------------------- ------- ---- --
----- ----------- - ------------------------------
----- --------- - -----------------------------
----- ---------- - ----------------------

--------------------------- -
  ---- ----
  ----------- -- -------
--

---------------------------- -
  ------- ------------------
--

-------------------------------------------- -
  ---- --------------------------------
--

---------------------- ----- ----- ------ -- -
  -- ------------ ---- -----------
  ----- ----- - ----- ------------------ ----- ---------- --
  ------ - ----- -
--

------------------------- - -------------- ---------------------- -- ----- ----- ------ -- -
  ----- ---------- - ------------------------------------
  ----- ------ - ----- -------------------- --- ----------------------- --
  ------ ------
--

-------------------- ----- -------- -- -
  -- ----- -
    ----------------------
    ---------------
  -
  ------------------------ --------- -- ------------
--

该应用程序现在具有 /login 路由,用于获取 JWT。只有具有有效 JWT 的用户才能访问 /users/:id 路由。

实现 API 缓存

为了加速 API 响应并减少数据库流量,可以将 API 响应缓存在 Redis 中。可以使用以下步骤实现:

  1. 安装 fastify-redis 插件。
  2. 将 Redis 配置为应用程序的缓存存储。
  3. 在需要缓存的路由上使用 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

纠错
反馈