如何基于 Hapi 框架实现 GraphQL API

在开发现代网络应用程序时,使用 GraphQL 成为了不可避免的选择。它提供了一种优雅的、高效的方式来定义和查询 APIs,并允许前端开发人员更灵活地访问后端数据。

在本文中,我们将介绍如何使用 Hapi 框架构建一个 GraphQL API。Hapi 是一个流行的 Node.js 框架,它提供了一套强大的工具和插件来帮助开发人员快速开发出可扩展的 Web 应用程序。

安装 Hapi

首先,我们需要在本地安装 Hapi。你可以在 Node.js 中使用 npm 或 yarn 安装 Hapi。

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

或者

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

安装 GraphQL

接下来,我们需要安装 GraphQL。GraphQL 可以通过 npm 或 yarn 安装。

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

或者

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

创建 Hapi 服务器

开始开发 Hapi GraphQL 服务器,我们需要定义一个 Hapi 服务器实例,并启动它。

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

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

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

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

-------

在上面的代码中,我们创建了一个名为 server 的 Hapi 实例。我们定义了服务器的端口和主机,然后通过将 server.start() 方法包装在 async 函数中,并使用 await 关键字等待其完成,来启动服务器。

添加 GraphQL 插件

为了让 Hapi 支持 GraphQL,我们需要添加一个 GraphQL 插件。

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

或者

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

下面是示例代码:

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

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

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

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

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

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

-------

在上面的代码中,我们添加了一个名为 gql 的 GraphQL 插件,并将其注册到了 server 实例中。接下来,我们定义了一个使用 POST 方法托管的路由 /graphql,并为其定义一个请求处理程序。该处理程序调用 graphql 方法,它是 GraphQL 的核心函数,它接收一个 GraphQL 查询、一个 GraphQL Schema、一些选项参数,然后返回一个 Promise,该 Promise 解决为查询结果。

我们已经定义了一个 mySchema 变量,用于存储我们的 GraphQL Schema。我们需要在服务器代码后面定义这个 Schema,以便查询和解析器方法能够使用它。

GraphQL Schema

我们来看一下如何定义 GraphQL schema。

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

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

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

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

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

在上面的代码中,我们首先导入了所需的 GraphQL 类型和函数,然后定义了一个叫做 UserType 的对象类型,它代表一个用户。在 UserTypefields 属性中,我们定义了一个 id、一个 name 和一个 email 字段,它们都是字符串类型,并且是必需的。

接下来,我们定义了一个叫做 RootQueryType 的对象类型,它代表了我们查询的根对象。在 RootQueryTypefields 属性中,我们定义了一个名为 user 的字段,它是一个 UserType 对象,返回一个具有 id、name 和 email 属性的用户对象。

最后,我们创建了一个 GraphQL Schema,并将 RootQueryType 分配给 query 属性。我们将其导出,以供我们的服务器 Code 中使用。

GraphQL 客户端查询

我们已经完成了 GraphQL 服务器的创建和定义,现在是时候来测试一下了。我们将使用 GraphQL Playground 进行测试。

在浏览器中打开 http://localhost:4000/graphql,你应该会看到 GraphQL Playground 界面。在左侧的查询窗格中,键入以下查询,然后单击右上角的运行按钮。

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

你应该会在右侧的响应窗格中看到类似于以下内容的 JSON 响应。

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

结论

在本文中,我们学习了如何基于 Hapi 框架实现一个 GraphQL API。我们从创建 Hapi 服务器开始,使用 GraphQL 插件的方法添加了它的支持,并最终定义了一个 GraphQL Schema。我们还在 GraphQL Playground 中演示了如何编写和运行一个 GraphQL 查询。

总的来说,Hapi 框架提供了一种灵活的方法来创建可扩展的、高性能的 Web 应用程序。通过使用 GraphQL 插件,我们可以轻松地将 GraphQL 集成到 Hapi 应用程序中,并提供更好的 API 查询支持。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6736aefd0bc820c58255c378