GraphQL 和 MongoDB 结合的最佳实践

阅读时长 8 分钟读完

前言

GraphQL 是一个通过 API 查询和操纵数据的开源查询语言。它可以在前端和后端之间提供一种统一的数据交换方式。MongoDB 是一个非关系型数据库,它使用文档模型存储数据。它的灵活性和可扩展性使得它成为了许多企业和开发者的首选。

在本文中,我们将介绍如何最好地将 GraphQL 和 MongoDB 结合使用,并探讨一些最佳实践。

GraphQL 和 MongoDB 的基础知识

GraphQL

GraphQL 是一种查询语言,它允许客户端指定所需数据的结构和格式。与 REST 不同,GraphQL 只需要一个端点,通过查询和变异操作,客户端可以获取和修改数据。

查询语法

GraphQL 查询由字段和参数组成。例如,以下是一个查询用户的示例:

这个查询将返回一个用户对象,其中包含该用户的名称、年龄和电子邮件。

变异语法

变异用于更新服务器上的数据。变异需要包含一个操作名称和一个输入对象。以下是一个变异用户的示例:

这个变异用于更新 ID 为 123 的用户。它将该用户的名称、年龄和电子邮件更改为 John、30 和 john@example.com

MongoDB

MongoDB 是一个基于文档的数据库,它使用 BJSON(二进制 JSON)格式存储数据。文档是一组键值对,其中的值可以是字符串、数字、日期、布尔值、数组或其他文档。

文档结构

MongoDB 文档结构如下:

该文档包含一个唯一 ID、名称、年龄和电子邮件属性。唯一 ID 是 MongoDB 中每个文档的唯一标识符。

查询语法

MongoDB 查询使用查询运算符。以下是一个查询年龄大于 25 的示例:

这个查询将返回年龄大于 25 的所有用户。

变异语法

MongoDB 变异使用操作运算符。以下是一个更新用户的示例:

这个变异使用 $set 操作符将 ID 为 5f4b97f0d83eac9f4375dd5c 的用户的名称更改为 John Jr。

将 GraphQL 和 MongoDB 结合使用的最佳实践

1. 设计 GraphQL 模式

首先,我们需要设计用于与 MongoDB 通信的 GraphQL 模式。在这个模式中,我们需要定义类型和字段,这些类型和字段对应于 MongoDB 中存储的文档。

例如,以下是一个用户类型的示例:

这个类型表示 MongoDB 中的用户文档。它包含 _id、名称、年龄和电子邮件字段。

2. 构建 GraphQL API

在设计完模式后,我们需要构建一个 GraphQL API,使客户端可以查询和变异 MongoDB 中的数据。我们可以使用 Node.js 和 express-graphql 构建 GraphQL API。

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

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

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

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

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

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

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

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

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

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

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

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

在这个示例中,我们定义了 typeDefsresolvers 对象,然后使用 makeExecutableSchema 函数创建一个 GraphQL schema。然后,我们使用 MongoClient 对象连接 MongoDB,然后使用 express-graphql 中间件创建一个路由,使之可以直接访问查询和变异操作。

3. 查询和变异 MongoDB 数据

现在,我们可以使用 GraphQL 对 MongoDB 数据进行查询和变异。例如,以下是查询年龄大于 25 的所有用户的示例:

这个查询将返回所有年龄大于 25 的用户的名称、年龄和电子邮件。

以下是创建用户的一个示例:

这个变异将创建一个名为 John 年龄为 30,电子邮件地址为 john@example.com 的用户,并返回该用户的信息。

结论

以上是 GraphQL 和 MongoDB 结合的最佳实践。通过遵循这些实践,您可以使用 GraphQL 和 MongoDB 构建一个灵活而可扩展的 API,使其可以直接访问 MongoDB 数据库。GraphQL 和 MongoDB 的结合使用,可以实现前后端的快速集成,提高开发效率,让前端工程师专注于业务逻辑的实现。

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

纠错
反馈