基于 GraphQL 的数据变更及数据校验的方法实现

阅读时长 6 分钟读完

GraphQL 是一种用于 API 的查询语言和运行时环境,它可以让客户端定义所需数据的结构。它提供了一种更加高效、强大、灵活的方式来获取和修改数据,同时还具有强大的数据校验功能。本文将介绍基于 GraphQL 的数据变更及数据校验的方法实现,并提供示例代码,帮助读者更好地理解和使用 GraphQL。

数据变更

Mutation

在 GraphQL 中,Mutation 是一种特殊的类型,它用于修改数据。Mutation 类型包含一组字段,每个字段都代表一个可以执行的操作。例如,我们可以定义一个名为 addUser 的 Mutation,用于添加新用户:

该 Mutation 接受两个必填参数 name 和 email,并返回一个 User 类型的对象。通过这种方式,我们可以在客户端发起一个 addUser 的 Mutation 请求,并传递需要添加的用户信息,服务端会根据请求的参数执行相应的操作,并返回新创建的用户信息。

Input

在 Mutation 中,我们经常需要传递一个复杂的参数对象,例如添加用户时需要传递一个包含多个字段的用户对象。为了简化参数的传递,GraphQL 提供了 Input 类型。Input 类型与普通类型类似,但是它们只用于输入参数,并且不能作为返回类型。例如,我们可以定义一个名为 UserInput 的 Input 类型,用于传递用户信息:

然后在 addUser Mutation 中使用 UserInput 类型作为参数:

这样,我们就可以将 addUser 的参数改为一个包含多个字段的 UserInput 对象,而不是多个独立的参数。

数据校验

GraphQL 提供了一种强大的数据校验功能,可以在服务端执行数据校验,并在校验失败时返回错误信息。GraphQL 的数据校验功能基于 Schema 和 Type System,因此需要在 Schema 中定义每个字段的类型、默认值和校验规则。

Scalars

在 GraphQL 中,Scalars 是一种特殊的类型,用于表示标量值,例如 String、Int、Float、Boolean、ID 等。每个 Scalar 类型都有一个预定义的解析器,用于将字符串类型的输入值转换为相应的标量值。例如,GraphQL 的 String 类型的解析器将字符串值转换为字符串类型的标量值。

除了预定义的 Scalars,我们还可以自定义 Scalars,例如,我们可以定义一个名为 Date 的 Scalar,用于表示日期类型:

然后在 Schema 中使用该 Scalar 类型:

这样,在客户端发起查询请求时,如果传递的 birthdate 不符合 Date 的格式要求,服务端就会返回错误信息,告诉客户端 birthdate 的格式不正确。

Directives

在 GraphQL 中,Directives 是一种特殊的语法,用于在 Schema 中为字段添加元数据和自定义行为。例如,我们可以在 Schema 中定义一个名为 @length 的 Directive,用于校验字符串的长度:

这样,在客户端发起查询请求时,如果传递的 name 或 email 的长度超过了指定的最大长度,服务端就会返回错误信息,告诉客户端 name 或 email 的长度超过了最大长度。

Custom Validation

除了 Scalars 和 Directives,我们还可以使用自定义的校验逻辑,例如,我们可以定义一个名为 validateEmail 的函数,用于校验 email 的格式:

这样,在 addUser Mutation 中添加了 @validateEmail Directive,服务端会在执行 Mutation 前先调用 validateEmail 函数进行校验,如果校验失败,就会返回错误信息。

示例代码

下面是一个基于 GraphQL 的数据变更及数据校验的示例代码,用于添加新用户并校验用户信息:

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

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

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

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

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

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

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

在该示例代码中,我们定义了一个名为 addUser 的 Mutation,用于添加新用户。该 Mutation 接受一个 UserInput 类型的参数,其中包含 name、email 和 birthdate 三个字段。在 addUser Mutation 中添加了 @validateUser Directive,服务端会在执行 Mutation 前先调用 validateUser 函数进行校验,如果校验失败,就会返回错误信息。在 validateUser 函数中,我们校验了 email 的格式,以及 name 和 email 的长度,如果校验失败,就会返回错误信息。

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

纠错
反馈