如何在 Node.js 应用程序中使用 GraphQL

阅读时长 8 分钟读完

前言

GraphQL 是一种用于 API 的查询语言和运行时环境,由 Facebook 开源。它不同于传统的 RESTful API,具有类型检查、强大的查询功能和灵活的响应数据格式等优点,已经被越来越多的公司和开发者所接受和使用。

本文将介绍如何在 Node.js 应用程序中使用 GraphQL,并为读者提供深度的学习和指导。在阅读本文前,需要读者已经具备一定的 Node.js 和 GraphQL 基础知识。

安装与配置

在 Node.js 中使用 GraphQL,需要安装 graphqlexpress-graphql 两个模块。graphql 模块提供了构建和执行 GraphQL 查询的核心功能,而 express-graphql 则增加了一个 Express 中间件用于处理 GraphQL 请求。

安装命令为:

在应用程序中引入模块:

构建 GraphQL Schema:

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

创建 Express 应用程序:

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

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

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

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

启动应用程序,并访问 http://localhost:3000/graphql,可以看到 GraphiQL 工具界面。

输入以下查询语句:

点击运行按钮,可以在右侧查看结果:

基本类型

GraphQL 支持的基本类型包括 Scalar、List 和非空类型。

Scalar 类型用于表示基本数据类型,如字符串、数字、布尔值等。GraphQL 提供了以下几种 Scalar 类型:

Scalar 类型 描述
Int 有符号 32 位整数类型
Float 有符号双精度浮点类型
String Unicode 字符串类型
Boolean 布尔类型
ID 标识符类型,用于唯一标识对象

List 类型用于表示数组类型,可以使用中括号将其包裹。例如,以下类型定义表示一个字符串数组:

非空类型用于表示必填字段,可以在类型名称后面添加一个 ! 告诉 GraphQL 该字段是非空类型。例如,以下类型定义表示一个必须包含 name 字段的对象类型:

数据源

在实际项目中,通常需要从数据库或外部 API 中获取数据。可以通过定义 Resolvers 来完成与数据源的交互。

Resolvers 是一个返回包含字段值的对象的函数。每个字段都有一个 Resolver,当查询中包含该字段时,会执行该 Resolver,并返回对应的数据。

以下是一个简单的数据源示例,使用了 lodash 模块模拟了一个人员列表:

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

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

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

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

定义 Resolver:

修改 Schema:

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

以上代码中,PersonType 是一个自定义类型,使用了上文所述的非空类型和列表类型。

Mutation

除了查询外,GraphQL 还支持修改数据的操作,称为 Mutation。与查询类似,Mutation 也可以定义自己的类型和 Resolvers。

例如,以下是一个简单的 Mutation 示范,用于向人员列表中添加新的人员:

声明 Mutation Type:

定义 Resolver:

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

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

修改 Schema:

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

在 GraphiQL 中执行以下 Mutation 语句:

可以看到返回值中包含新添加的人员信息:

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

总结

本文介绍了如何在 Node.js 应用程序中使用 GraphQL,从安装和配置开始,逐步深入讲解了 GraphQL 的基础概念、基本类型、数据源和 Mutation 等内容,并提供了示例代码供读者参考。

希望本文对读者能有所帮助,更多 GraphQL 相关知识,请阅读官方文档。

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

纠错
反馈