如何使用 Hapi 和 GraphQL 进行 API 实现

阅读时长 7 分钟读完

在现代 Web 开发中,实现一个可扩展、高效的 RESTful API 是一个非常重要的任务。然而,RESTful API 在某些情况下并不总是最适合的解决方案,尤其是在涉及多方面数据查询的情况下。这时,GraphQL 就显得更加适合了。GraphQL 是 Facebook 开发的一种查询语言和运行时环境,旨在提高 API 查询效率和灵活性。在本文中,我们将介绍如何使用 Hapi 和 GraphQL 实现一个可扩展的 API。

Hapi 是什么?

Hapi 是一个 Node.js Web 框架,它提供了一套简单明了的 API 来构建 Web 应用程序和服务。它的灵活性和可扩展性使它成为开发高效、快速 Web 服务的有力选择。

GraphQL 是什么?

GraphQL 是 Facebook 开发的一种查询语言和运行时环境,旨在提高 API 查询效率和灵活性。使用 GraphQL,客户端可以请求自己所需要的数据,避免了出现不必要的数据下载和处理。

GraphQL 特有的一个重要概念是 “类型定义”,它描述了所有可用数据类型以及它们之间的关系。这样,客户端可以在运行时使用这些类型,并对它们进行 CRUD 操作(增删改查)。

Hapi 和 GraphQL 协同工作

使用 Hapi 和 GraphQL 来实现一个 Web 服务 API,我们可以使用以下模块:

  • hapi: 我们将使用 Hapi 框架构建我们的 Web 服务 API。

  • graphql: 该模块将用于处理 GraphQL 查询。

  • hapi-graphql: 它是将 GraphQL 运行时集成到 Hapi 框架中的插件。

开始构建 Web API

安装依赖

在构建之前,我们需要将以下依赖项安装到项目中:

引入模块

让我们开始创建 index.js 文件,并引入 Hapi、graphql 和 hapi-graphql 模块:

定义 GraphQL schema

让我们定义一个 GraphQL schema 来描述我们的数据 PersonCompany

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

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

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

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

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

配置 Hapi 服务器

让我们创建一个 Hapi 服务器并在配置中添加 hapi-graphql 插件:

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

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

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

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

---------------
------------------- ------- --- ---------------------
  • 在上述代码中,首先我们创建一个 Hapi 服务器并添加了一个 / 路由来测试服务器是否运行。

  • 接下来,我们通过调用 server.register() 函数来添加 hapi-graphql 插件。

  • 该插件需要以下配置:

  • path: 可选的,GraphQL 请求的端点。默认是 /graphql

  • graphqlOptions: 必需的,它是一个函数,需要返回一个对象 options,包含 GraphQL schema,以及其他任何相关的配置选项。在此例中,我们将 schema 传递给 options 对象。

  • route: 可选的,包含路由配置的对象。在此例中,我们将 cors 设置为 true

  • 接下来,我们定义了另一个插件 graphiqlHapi。它用于提供图形用户界面(GUI)来测试 GraphQL 查询。

处理 GraphQL 查询

访问 http://localhost:4000/graphql 我们现在可以使用 GraphQL 查询来获取数据。例如:

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

在这个查询中,我们请求一个 person 的数据,并将该 id 传递给查询。在这个查询中,我们还请求了关联公司的数据。该查询将返回 JSON 格式的数据。

结论

使用 Hapi 和 GraphQL 实现 Web API 的好处是数据查询灵活,客户端可以查询所需要的数据,并避免不必要的数据下载和处理。在这篇文章中,我们使用 Hapi 和 GraphQL 进行了 API 实现,并提供了示例代码。如果你想构建高度定制化、灵活、可扩展的 API,那么使用 Hapi 和 GraphQL 是一个很好的选择。

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

纠错
反馈