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

AI 编程助手,豆包旗下的编程助手,提供智能补全、智能预测、智能问答等能力,节省开发时间,释放脑海中的创造力,支持 VSCode,点击体验 AI

什么是 @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


猜你喜欢

  • npm 包 pouchdb-users 使用教程

    介绍 PouchDB 是一个在浏览器和本地设备上使用的 NoSQL 数据库,与 CouchDB 兼容。PouchDB 可以用于构建离线应用程序,因为它允许您在客户端本地存储数据,然后在联机时将数据同步...

    4 年前
  • npm 包 @hoodie/account-server-api 使用教程

    简介 @hoodie/account-server-api 是一个用于创建用户帐户的 npm 包,它提供了以下功能: 注册新帐户 登录帐户 重置密码 验证邮箱地址 本文将详细介绍如何使用该包,并提...

    4 年前
  • npm 包 @hoodie/account-server 使用教程

    概述 @hoodie/account-server 是一个由 Hoodie 社区提交的 npm 包,旨在为开发者提供一个可用的完整服务器端应用程序,以管理和认证用户帐户。

    4 年前
  • npm 包 @gr2m/hapi-to-express 使用教程

    在前端开发中,有时会遇到需要将 hapi 应用迁移到 express 框架上的情况。这时候,我们可以使用 @gr2m/hapi-to-express 这个 npm 包来简化迁移的过程。

    4 年前
  • npm 包 @hoodie/store-server-api 使用教程

    1. 简介 @hoodie/store-server-api 是一个用于建立基于 Hoodie 的简单存储服务的 npm 包。它提供了几个后端 API 实现,其中包括内存,文件和 PouchDB,也可...

    4 年前
  • npm 包 hoodie-zuul-config 使用教程

    介绍 hoodie-zuul-config 是一款 Hoodie 插件,用于配置和管理 Backend 服务。该插件允许用户通过简单的配置和管理,来实现自定义 Backend 服务的需求。

    4 年前
  • npm 包 pouchdb-hoodie-api 使用教程

    在前端开发中,我们常常需要使用到数据库来存储、读取数据。PouchDB是一个轻量级、基于浏览器的 NoSQL 数据库,适用于在浏览器和 Node.js 中存储数据。

    4 年前
  • npm 包 to-id 使用教程

    在前端开发中,我们经常需要对数据进行转换、格式化等操作。常见的需求是将字符串转换成标准的 id,以便在后台进行处理。此时,npm 包 to-id 可以帮助我们快速地完成这个任务。

    4 年前
  • npm包@hoodie/store-server使用教程

    前言 前端发展迅速,展示、交互、业务逻辑处理已经远远不够。现在的前端工程师需要了解后端的知识,能够在前端和后端之间进行数据交换和调取API。而npm包@hoodie/store-server就是一款可...

    4 年前
  • NPM 包 PouchDB-Admins 使用教程

    PouchDB-Admins 是一个基于 PouchDB 的插件,它允许你在你的 PouchDB 数据库中创建管理员帐户,控制数据库中的读写访问权限。在本文中,我们将介绍如何使用 PouchDB-Ad...

    4 年前
  • npm 包 pouchdb-doc-api 使用教程

    前言 随着前端开发的发展,越来越多的应用需要在客户端中存储数据。PouchDB 的出现为解决这个问题提供了一种方便的解决方案。PouchDB 是一个基于浏览器的 NoSQL 数据库,它可以在客户端中存...

    4 年前
  • npm 包 @hoodie/server 使用教程

    随着前端技术的不断发展,前后端分离已经成为了一种趋势。作为前端开发人员,我们除了掌握精通 HTML、CSS 和 JavaScript 等基础知识外,还需要掌握很多其他的技能。

    4 年前
  • npm 包 hoodie-admin-dashboard-uikit 使用教程

    在开发前端应用时,我们需要使用很多的工具和框架来增加生产效率和提高代码质量。npm 包是其中一个重要的工具,它可以帮助我们快速地复用以往编写的代码和第三方库。在这篇文章中,我们将会介绍一个 npm 包...

    4 年前
  • npm 包 @1000ch/eslint-config 使用教程

    作为前端开发者,代码的质量控制是非常重要的。每个人的编码风格不尽相同,但是从团队协作和代码管理的角度来看,有一定的规范和统一便于代码的维护和升级。本文主要介绍如何使用 @1000ch/eslint-c...

    4 年前
  • npm 包 gaston-aliasify 使用教程

    在前端开发中,经常需要使用多个 JavaScript 库和框架,为了方便管理和引用,npm 已经成为了前端开发的标配。但是有时候不同的库和框架之间会有命名空间冲突的问题,并且使用长长的引用路径也会导致...

    4 年前
  • npm 包 jaws-api-gateway-client 使用教程

    jaws-api-gateway-client 是一个用于简化 AWS API 网关调用的 npm 包。它允许您通过简单的配置和 API 调用规则来进行快速的 API 开发。

    4 年前
  • npm 包 gaston-serve-index 使用教程

    前言 作为一名前端开发者,我们经常会需要在本地搭建一个静态服务器,用来预览我们的开发成果。虽然 Node 自带了 http-server,但是它的文件列表展示功能十分简陋,无法满足我们的需求。

    4 年前
  • npm 包 gaston-smapify 使用教程

    简介 在前端开发中,我们经常需要使用一些第三方库来简化自己的代码,一些常见的库可以直接在浏览器引入,而一些比较高级的库则需要使用 npm 包管理器来安装。 Gaston-smapify 是一个轻量级的...

    4 年前
  • npm 包 smapify 使用教程

    前言 在前端开发过程中,我们经常需要处理大量的数据和复杂的逻辑操作,为了提高我们的开发效率,我们可以使用一些工具来简化我们的开发流程。一个很常用的工具就是 smapify,它是一个能够处理 JavaS...

    4 年前
  • npm 包 @marionebl/react-router 使用教程

    前言 在开发 Web 应用时,页面跳转是一个常见需求。React 路由是 React 应用中一个重要的扩展,它可以帮助我们实现页面的跳转。而且,在 React 中使用 @marionebl/react...

    4 年前

相关推荐

    暂无文章