使用 Hapi 框架搭建 RESTful API 的全流程

阅读时长 8 分钟读完

在前端开发中,构建 RESTful API 是必不可少的一部分。RESTful API 可以让前端开发者和后端开发者分离开发,提高开发效率和代码质量。Hapi 是一个基于 Node.js 的优秀框架,适用于构建 RESTful API 和微服务。本文将介绍如何使用 Hapi 框架快速搭建 RESTful API 的全流程。

Hapi 框架

Hapi 是一个由 Walmart Labs 团队开发的 Node.js 框架,提供了许多便利且高效的功能,如路由模块、认证模块、错误处理模块等。使用 Hapi 框架可以简化 RESTful API 的搭建流程,让我们专注业务代码的实现。

准备工作

在开始之前,我们需要准备环境。

安装 Node.js

首先我们需要安装 Node.js,可以到官网下载地址: https://nodejs.org/en/download/ 根据所需平台和版本,根据步骤完成安装。

安装 Hapi 框架

在安装 Node.js 后,我们需要使用 npm 命令行安装 Hapi 框架,可以在命令行中输入如下命令完成安装:

安装插件

为了更加高效地使用 Hapi 框架,并且为后续测试和开发做准备,我们还需要安装一些常用插件:

  • joi:用于验证数据
  • boom:用于返回错误信息
  • inert:用于服务器文件和目录处理

安装方法:

到此,我们所需准备的工作就已经全部完成了。接下来,我们将使用 Hapi 框架构建一个 RESTful API 程序。

创建服务器

使用 Hapi 框架构建 RESTful API 的第一步,是初始化一个服务器实例。

在演示代码中,我们将创建一个名为“server”的服务器实例。演示代码如下:

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

----- -------- ------- -
    --- -
        ----- ---------------
    - ----- ----- -
        -----------------
        ----------------
    -
    ------------------- ------- ----- -----------------
-
--------
展开代码

代码解释:

  1. 引入 Hapi 框架,创建一个名为 Hapi 的常量,并调用实例化服务器的方法 server()。
  2. 在实例化服务器时,传入服务器的参数对象。此代码指定了服务器的端口号和主机名。
  3. 创建一个异步函数 start(),并在函数中启动服务器。通过 try...catch 语句,我们可以捕获任何启动期间发生的错误。

在代码的最后一行,我们调用了 start() 函数,启动服务器。在命令行工具中,我们可以输入 node server.js 命令启动服务器。如果一切顺利,就可以看到如下信息:

创建路由

在服务器上创建路由是构建 RESTful API 的下一步。路由决定了服务器如何响应客户端请求。

在演示代码中,我们将在 /todos 路径上创建两个路由,一个用于获取 todos 数组的元素,另一个用于添加一个新的 todo 元素。

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

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

--------------
    ------- -------
    ----- ---------
    -------- --------- -- -- -
        ----- ---- - -
            --- ------------ - --
            ------ ---------------------
        --
        -----------------
        ------ ---------------------------
    --
    -------- -
        --------- -
            -------- -
                ------ -----------------------
            -
        -
    -
---
展开代码

代码解释:

  • 通过调用 server.route() 函数来添加路由。在参数中,我们指定了路由的方法、路径、和处理程序。
  • 第一个路由是 GET /todos,用于获取 todos 数组的所有元素。处理程序只需简单地返回 todos 数组。
  • 第二个路由是 POST /todos,用于在 todos 数组中添加新的元素。处理程序将根据 payload 中提供的数据添加新 todo 元素。在这里,我们使用了 joi 插件来验证 payload 是否符合预期的格式。如果验证不通过,则返回一个错误。

最后一个参数 options 指定了路由选项,其中包含验证数据的选项。在此,我们验证了请求 body 中是否包含一个必填的 title 字段。

处理错误

在处理 RESTful API 请求过程中,我们需要确保应用程序能够正确地处理和响应错误。

在演示代码中,我们将使用 boom 插件来处理 API 请求过程中的错误。boom 插件会自动将错误转换成相应的 HTTP 错误状态码,并返回 JSON 格式的错误消息。

-- -------------------- ---- -------
--------------
    ------- ------
    ----- --------------
    -------- --------- -- -- -
        ----- -- - ------------------
        ----- ---- - --------------- -- ------- --- --------------
        -- ------- -
            ----- ------------------- ---- -- ----- --- --------
        -
        ------ -----
    -
---
展开代码

代码解释:

  • 在此代码中,我们使用了 RESTful API 中的 GET 方法,使用类似 /todos/{id} 的路径来返回单独的 todo 元素。在此路由的处理程序中,我们使用了 request.params 来访问路由参数。如果找不到目标 todo,我们就抛出了一个自定义的错误。

返回文件和目录

有时候,我们需要从服务器返回静态文件和目录。在 Hapi 框架中,我们使用 inert 插件来完成此功能。

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

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

    --------------
        ------- ------
        ----- ------------
        -------- -
            ---------- -
                ----- -------------------- ---------
            -
        -
    ---
---
展开代码

代码解释:

  • 首先,我们引入 Path 模块,用于在代码中指定文件和目录的路径。
  • 我们还需要引入用于静态文件处理的插件 inert。
  • 在注册插件后,我们使用 server.route() 函数来创建一个路由。在这里,我们使用了 * 参数来匹配所有 URL,而不仅仅是根 URL。我们指定了 Path.join(__dirname, 'public') 作为静态文件的目录。这将启用我们的服务器返回所有从该目录传入的静态文件。

启动服务器

在上面的所有步骤中,我们已经定义了服务器,并分别为服务器的每个路由添加了相关的处理程序。现在,我们可以使用 start 函数来启动服务器,该函数在本文开头已经介绍过。

-- -------------------- ---- -------
----- -------- ------- -
    --- -
        ----- ---------------
    - ----- ----- -
        -----------------
        ----------------
    -
    ------------------- ------- ----- -----------------
-
--------
展开代码

运行 start() 函数,在命令行中输入以下命令:

如果一切顺利,您应该会看到如下信息:

到此,我们已经完成了使用 Hapi 框架搭建 RESTful API 的全流程。希望本篇文章可以对希望学习 Hapi 的开发者有所帮助。

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

纠错
反馈

纠错反馈