在 Hapi 的应用程序中构建并运行 GraphQL

阅读时长 4 分钟读完

GraphQL 是一种用于 API 的查询语言,它允许客户端精确地指定它们需要的数据,避免了传统 REST API 中的过度获取数据的问题。Hapi 是一个 Node.js 框架,它提供了强大的路由和插件系统,使得构建 Web 应用程序变得更加容易。本文将介绍如何在 Hapi 应用程序中构建和运行 GraphQL API。

安装依赖

在开始构建 GraphQL API 前,需要安装以下依赖:

  • hapi:Hapi 框架
  • graphql:GraphQL 的核心库
  • graphql-hapi:将 GraphQL 集成到 Hapi 中的插件
  • graphql-tools:用于构建 GraphQL schema 的工具库
  • apollo-server:GraphQL 服务器实现

可以使用以下命令安装这些依赖:

创建 GraphQL Schema

GraphQL 的核心是 schema,它定义了 API 中的所有类型、查询和变异。可以使用 graphql-tools 中的 makeExecutableSchema 函数来创建 schema。以下是一个简单的例子:

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

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

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

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

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

这个 schema 定义了一个 Query 类型,其中包含一个 hello 字段,它返回字符串 "Hello world!"resolvers 对象定义了如何解析查询字段。

集成 GraphQL 到 Hapi

使用 graphql-hapi 插件可以将 GraphQL 集成到 Hapi 中。以下是一个简单的例子:

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

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

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

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

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

这个代码片段创建了一个 Hapi 服务器,并将 graphqlHapi 插件注册到了服务器中。graphqlOptions 对象包含了 schema 对象,path 属性指定了 GraphQL API 的路径,route 对象启用了跨域资源共享(CORS)。

运行 GraphQL API

现在,GraphQL API 已经可以在 Hapi 应用程序中运行了。可以使用以下命令启动服务器:

然后,可以使用 GraphQL Playground 或其他 GraphQL 客户端工具来测试 API。以下是一个简单的查询示例:

该查询应该返回 "Hello world!" 字符串。

结论

本文介绍了如何在 Hapi 应用程序中构建和运行 GraphQL API。首先,需要创建一个 GraphQL schema,然后使用 graphql-hapi 插件将其集成到 Hapi 中。最后,可以使用 GraphQL Playground 或其他 GraphQL 客户端工具来测试 API。这种方法可以使得构建和维护 Web 应用程序变得更加容易和高效。

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

纠错
反馈

纠错反馈