利用 Fastify 在 Node.js 中快速开发 API

阅读时长 8 分钟读完

前言

在现代 Web 开发中,API 是一个非常重要的组成部分。开发者需要从后端系统中获取数据,并将其呈现给前端。一般来说,服务器端的代码需要能够快速处理请求,以便更高效地响应客户端的请求。在 Node.js 中,有许多流行的 Web 框架可以使用,其中一个非常流行的框架是 Fastify。

Fastify 是一个流行的 Web 框架,专注于提供快速和低开销的 HTTP 服务器。它支持插件式的设计,可以在自己喜欢的基础上轻松扩展功能。本文将介绍如何使用 Fastify 框架快速开发 API,以及一些示例代码和实际案例。

快速上手

在开始开发之前,您需要安装 Node.js。Fastify 是一个 node.js 模块,用于创建 Web 服务器。您可以使用以下命令全局安装 fastify:

安装完毕后,我们开始使用 Fastify。

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

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

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

这里,我们创建了一个 HTTP 服务器,并在端口 3000 上侦听请求。/

fastify.get('/', async (request, reply) => {})是一个路由处理函数。当我们访问根路由'/'时,会执行这个函数。asyncreturn关键字告诉 Fastify 这是一个异步函数,用于处理 HTTP GET 请求的响应。

在这个例子中,我们简单地返回了一个hello world 对象。我们可以通过在浏览器中访问http://localhost:3000来验证该应用程序是否正常工作。

创建插件

插件是 Fastify 框架中非常重要的一部分。使用插件可以轻松地扩展您的应用程序的功能。让我们来看一下如何创建一个插件。

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

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

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

上面的代码定义了一个名为 myPlugin 的插件。您可以通过将其导入到您的应用程序中来使用它。

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

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

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

这里,fastify.register()函数用于注册插件。然后,我们使用fastify.ready()函数在 Fastify 框架准备好后调用自定义插件。

高效使用 Fastify

Fastify 框架通过一些高级特性来扩展您的应用程序功能,这是它成为了一个流行的 Web 框架的原因之一。下面,我们将看一些用于高效使用 Fastify 的技巧。

异步生命周期钩子

Fastify 提供钩子函数,用于处理路由处理程序之前或之后的各种生命周期事件。例如,我们可以在 Fastify 初始化时打开数据库连接,并在 Fastify 应用关闭之前关闭它。

下面是一个使用钩子函数的示例:

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

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

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

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

当您发出请求时,每次访问地址时 onRequest 都会被调用,无论是 /,GET、POST 或者其他方法。当请求返回时, onResponse 也会被调用 。 当错误发生时(例如,用户请求不存在的网页),则 onError 处理错误,关闭 Fastify 时,onClose钩子的代码会运行。

将 Fastify 与 Swagger 生态系统集成

Swagger 是一种自动化文档系统,可以自动生成我们创建的 API,这在很多开发团队和产品经理之间非常有用。好在,Fastify 可以集成 Swagger 生态系统。

首先,我们通过安装 Swagger UI 的 fastify-swagger 插件:

Fastify Swagger 依赖于 JSON 格式的 API 规范。使用 Fastify 插件,您可以生成规范:

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

这里,我们使用 fastify-swagger 插件封装 Fastify 应用程序并生成 Swagger 规范。在 Swagger UI 上使用,访问http://localhost:3000/docs 将返回此 UI。

在 Fastify 上应用鉴权

鉴权是另一个 Fastify 用于构建 API 的最佳实践。您可能需要确保当前用户具有访问 API 中某些部分的权限。一般来说,您可以使用 OAuth 或 JWT 来实现身份验证和授权操作。

但是,鉴权操作可能会增加 HTTP 通信的响应时间,因为它可能涉及到许多呼叫,并且可能涉及到网络 I/O 操作。可以将 Fastify 插件用于接口鉴权。

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

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

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

这里,fastify-plugin 插件将 Fastify 应用程序与我们的鉴权函数 authenticate 结合在一起。在 authenticate 函数中,我们配置如何验证 JWT 是否有效。

使用 Fastify 来启动 HTTPS 服务器

HTTP 协议可能很好,但是在某些情况下,您可能需要使用 HTTPS 来确保安全性。实际上,您可以使用 Fastify 来启动一个基于 HTTPS 的服务器。

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

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

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

注意,在调用fastify.listen()函数时,设置了 HTTP 端口与 HTTPS 端口。如果您不想使用一个特定的端口,只需要传递 {port:0}对象,Fastify 框架会选择一个未使用的端口。

结论

Fastify 是一个非常流行的 Web 框架,支持 JavaScript,TypeScript 和其他语言。快速、可扩展和灵活的设计使其成为开发 RESTful API 和其他 Web 服务的理想工具。在本文中,我们提供了一些示例代码和最佳做法,用于编写高性能的 Fastify API,应该可以帮助您快速入门。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6772097e6d66e0f9aad3e37d

纠错
反馈