npm 包 @gar/hapi-json-api 使用教程

阅读时长 15 分钟读完

什么是 @gar/hapi-json-api

@gar/hapi-json-api 是一个基于 Hapi.js 平台的 JSON API 插件,它实现了简单方便的 API 格式化和路由控制。使用该插件可以轻松构建出符合 JSON API 规范的 Web API 接口。

安装

使用该插件需要先安装 Hapi.js,如果您还没有安装Hapi.js,请执行:

接下来安装 @gar/hapi-json-api:

使用教程

初始化

要使用 @gar/hapi-json-api,首先需要在 Hapi.js 的插件配置中添加该插件:

定义路由

@gar/hapi-json-api 使用路由标记来继承、实现 JSON API 的路由格式化。它支持普通的 Hapi.js 路由参数,而且额外提供了一些特殊的路由参数:

参数 描述
handler
query.handler
validation 支持 Joi 验证
auth 支持 Hapi.js 的 auth 验证
jsonApi 设置 JSON API 的返回数据

以下是一个基本路由的示例代码:

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

定义 JSON API 消息

@gar/hapi-json-api 为 JSON API 定义了一个 API 响应的数据消息格式。当您使用 JSON API 请求时,它将自动使用此消息格式返回数据。

下面是 JSON API 消息的数据格式:

-- -------------------- ---- -------
-
  ------- -
    ----- -------
    ------- --------
    ------------- -
      ------- -----
      -------- ----------------------
    --
    ---------------- -
      ---
    --
    ------- -
      ---
    -
  --
  -------- -
    ------- -------------------------------
  --
  ----------- -
    ---
  --
  ------- -
    ---
  -
-
  • data: 返回的实际数据,类型可以是对象、数组、null。
  • links: 返回的 JSON API 链接。
  • included: 以包含的方式返回非主要资源的额外数据。
  • meta: 返回的元数据信息。

查询参数

@gar/hapi-json-api 支持一些通用的查询参数,可以让前端更方便的筛选、排序、分页以及限制结果条数。下面列出了支持的查询参数,以及应用方式。

查询参数 描述 应用 示例
fields 设置要返回的字段。字段名使用 ',' 分隔。 限制返回条目 fields=name,email
sort 根据某个字段进行排序。字段名前面添加 '-' 表示降序。 多个字段用 ',' 分隔。 sort=-createdAt,name
page[offset]、page[limit] 分页查询。必须同时设置。 limit - 限制返回条目数量。offset - 返回的数据位移。 page[offset]=5&page[limit]=10
Include 返回指定关联的包含资源。 应用到GET、POST include=comments
filter 根据字段筛选返回结果。支持匹配、范围查询、通配符等。 允许多种操作符号。 filter[name]=John&filter[age][gte]=20

案例

下面是一个典型的 Web API 的示例,它使用 @gar/hapi-json-api 实现了 JSON API 标准的 API 接口。

  • usersRoute.js —— 用户关联资源
  • commentsRoute.js —— 评论资源

usersRoute.js

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

commentsRoute.js

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

示例代码

以下是示例代码,我们将创建一个 Web API 来显示用户和评论:

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

总结

@gar/hapi-json-api 提供了基于 Hapi.js 平台的 JSONAPI 插件,它可以轻松的构建符合 JSONAPI 规范的 Web API 接口,还支持通用查询参数,页面分页等功能。相信有了本篇文章的介绍和实例,您一定可以轻松上手使用并开发出满足业务需求的应用程序。

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

纠错
反馈