GraphQL 中的输入验证方法总结

GraphQL 是一种用于 API 的查询语言和运行时环境,广泛用于前端开发。在 GraphQL 中,开发者可以通过定义自己的类型系统来描述 API 中可用的数据。但是,当用户发起查询时,输入的数据往往需要进行验证,以确保数据的正确性和安全性。本文将介绍 GraphQL 中的输入验证方法,以及如何使用这些方法来保护你的应用程序,避免潜在的问题。

GraphQL 中的输入类型

在 GraphQL 中,所有的输入都表示为类型。例如,一个简单的查询可能具有以下输入:

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

这个查询中的 id 是一个字符串,它传递给 user 字段作为参数。在 GraphQL 中,我们需要使用输入类型来表示这个参数。输入类型描述了查询时可以使用的输入,并定义了每个输入的类型和值的验证方法。

在 GraphQL 中,有三种输入类型:

  • 标量类型:标量类型是原始类型,例如字符串或数字,它们的验证方法由 GraphQL 核心库提供。
  • 枚举类型:枚举类型是一组具有预定义值的标量类型。它们的验证方法由 GraphQL 核心库提供。
  • 自定义输入类型:自定义输入类型是用户定义的输入类型,它们描述了一个复杂的输入参数,由开发者提供验证方法。

GraphQL 输入验证的目的

输入验证是一项重要的工作,它可以在 GraphQL 中完成。这是因为 GraphQL 定义了一种类型系统,可以允许开发者定义特定的输入类型,从而保证传递给 GraphQL 的输入参数始终与定义匹配。

输入验证的目的是确保传递给 GraphQL 的输入参数是:

  • 有效的:输入参数的格式正确,包括类型、范围和格式等等。
  • 安全的:输入数据没有潜在的安全问题,例如 SQL 注入。
  • 一致的:输入参数与预期的数据类型和对应值类型一致。

GraphQL 输入验证方法

在 GraphQL 中,有许多输入验证方法,开发人员可以根据需求自由选择使用。下面是一些常用的输入验证方法:

内置的标量类型验证

GraphQL 内置了许多标量类型,例如 Int、Float、String、Boolean 和 ID 等等。这些标量类型的验证方法由 GraphQL 核心库提供,它们会自动验证输入参数是否符合标量类型。

例如,如果一个查询的输入参数应该是一个字符串,然而传递给它的是一个数字,则 GraphQL 将返回错误信息,指出输入是无效的。

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

返回结果:

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

自定义标量类型验证

开发者还可以通过自定义标量类型来验证特定的数据类型。例如,假设我们需要验证一个输入参数是否是一个有效的邮箱地址,我们可以定义一个自定义标量类型来验证。

------ -----

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

定义 Email 标量类型的验证方法:

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

使用自定义标量类型 Email

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

枚举类型验证

枚举类型是一种特殊的标量类型,它只接受特定的一组预定义值。在 GraphQL 中,开发人员可以使用枚举来表示一组可能的输入值,这些输入值是被限制的。例如,以下是一个枚举类型:

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

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

使用枚举类型:

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

如果传入了无效的值,将返回一个错误信息。

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

错误信息:

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

自定义输入类型验证

自定义输入类型可以包含多个字段,并使用验证方法来确保输入值的正确性。例如,以下是一个自定义输入类型:

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

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

创建用户输入类型的验证方法:

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

使用自定义输入类型 CreateUserInput

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

如果传递了无效的输入值,将返回一个错误信息。

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

错误信息:

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

结论

在 GraphQL 中,输入验证是确保数据安全性和正确性的重要环节。使用 GraphQL 的输入验证方法可以保证输入值的有效性、安全性和一致性。GraphQL 提供了多种输入验证方法,包括标量类型、枚举类型和自定义输入类型。开发者可以根据自己的需求选择适合自己的验证方法。

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