使用 Node.js 进行 GraphQL 数据验证的最简便方法

阅读时长 8 分钟读完

GraphQL 是如今最受欢迎的 API 查询语言之一,它的优势在于能够更好地管理数据和查询操作,同时提高 API 的效率。然而,GraphQL 查询可能具有复杂的数据结构,需要进行数据验证和过滤,以确保返回的数据符合预期格式和类型。

在 Node.js 中,我们可以使用各种 GraphQL 库来构建服务器端应用程序,而在这个过程中,数据验证是无法避免的,因此我们需掌握一些最简便的方法来保证数据的完整性和正确性。

数据验证的方法

在 Node.js 中,我们可以使用许多库来处理数据验证,包括 Joi, Validate.js 和 Ajv 等。这些库可以对数据对象进行验证,与 GraphQL 数据验证的过程相似。

但是,使用这些库进行数据验证和GraphQL数据验证的方法有很多不同之处。在下面的示例中,我们将使用 GraphQL schema 和 graphql-yoga 库来构建简单的 GraphQL 应用程序,并进行数据验证。

首先,在 package.json 文件中添加以下代码:

然后,在 index.js 文件中编写以下代码:

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

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

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

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

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

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

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

以上代码中,我们定义了一个查询和一个变异。查询返回指定 id 的 Post 对象,它具有 id、title、content 和 createdAt 属性。变异使用 PostInput 对象作为参数并返回新创建的帖子。

验证输入数据的类型和格式

接下来,我们需要在变异中添加数据验证逻辑,以确保输入的数据符合预期格式和类型。这可以使用 GraphQL 中的 Argument Validation 来完成。

为此,请在变异定义中添加 typeDefs,主要用于验证输入参数类型的定义,以及 resolver 中的参数 $args 的定义:

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

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

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

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

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

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

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

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

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

验证返回的数据的格式和类型

最后,我们需要验证查询和变异返回的数据符合预期的格式和类型。这可以使用 GraphQL 中的 Schema Validation 来完成。

要验证返回的数据,我们可以使用类型定义和 resolver 中的实际返回值的类型定义。

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

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

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

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

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

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

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

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

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

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

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

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

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

以上代码中,我们首先定义了一个假 Post 对象用于查询。然后我们添加了一个 Schema validation。在这个例子中,我们只添加了一个简单的 validation rule 限制 GraphQL 查询的最大深度。你可以根据自己的应用需要添加更多的 validationRule,比如对返回数据的大小进行限制。

结论

在这篇文章中,我们学习了如何在 Node.js 中使用 GraphQL 进行数据验证。我们采用了 graphql-yoga 库来构建应用程序,并学习了关于解析器、类型定义和变异的一些基本概念。最后,我们使用 Schema Validation 完成数据验证。通过这些知识,我们可以保证达到预期的结果,并使数据更加准确。

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

纠错
反馈