GraphQL 中字段参数的用法详解

GraphQL 是一种用于 API 的查询语言,通过定义类型和字段来指定需要返回的数据,并且允许客户端对返回数据进行精确的控制。在 GraphQL 中,我们可以为每个字段定义参数,以便更加灵活地获取我们所需要的数据。本文将详细介绍 GraphQL 中字段参数的用法。

定义字段参数

在 GraphQL 中定义字段参数非常简单,只需要在字段后面加上一对圆括号括起来的参数列表即可。例如:

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

在上面的例子中,我们定义了一个 Query 类型,其中包含一个 user 字段。该字段接收一个 id 参数,并返回一个 User 类型的值。

参数列表可以包含多个参数,每个参数都包含一个名称和一个类型。例如,下面的例子定义了一个 add 字段,该字段接收两个整数参数 ab,并返回它们的和:

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

参数类型

在 GraphQL 中,每个参数都必须有一个类型。参数类型可以是 GraphQL 的内置类型,也可以是我们自己定义的类型。

内置类型

GraphQL 中内置了一些常见的数据类型,如字符串,整数,浮点数,布尔值等。这些类型可以直接在参数的类型定义中使用,例如:

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

在上面的例子中,search 字段接收一个字符串类型的 query 参数,paginate 字段接收两个整数类型的参数 pageperPage

自定义类型

在 GraphQL 中,允许我们自定义类型。对于对象类型的参数,我们可以使用已定义的类型,或者是自定义的类型。例如:

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

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

在上面的例子中,Query 类型包含了一个 user 字段,该字段接收一个 id 参数,并返回一个 User 类型的值。我们在 User 类型定义中包含了 nameage 两个字段。

除了对象类型,我们还可以自定义枚举类型和输入类型。例如,下面的例子定义了一个枚举类型和一个输入类型:

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

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

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

在上面的例子中,我们定义了一个枚举类型 Direction,指定了排序的方向;另外我们还定义了一个输入类型 PaginationInput,该类型包含了需要的参数信息;paginate 字段接收一个 PaginationInput 类型的输入参数,返回一个 [Item!] 类型的结果数组。

可选参数

在 GraphQL 中,参数可以指定为可选参数。可选参数指的是当该参数没有传入时,将使用默认值。例如:

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

在上面的例子中,search 字段接收两个可选参数 querylimit,默认分别为 ""10

参数默认值

在 GraphQL 中,我们可以为参数指定默认值。例如:

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

在上面的例子中,search 字段接收两个参数,一个可选的 query 参数,默认为 "",一个必选的 limit 参数。如果没有传入 limit 参数,则会抛出一个错误。

参数指令

在 GraphQL 中,我们可以使用参数指令对参数进行精细的控制。例如:

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

在上面的例子中,search 字段接收两个参数,一个 query 参数和一个必选的 limit 参数。对于 query 参数,我们使用了 @trim 指令,该指令将在查询前去除参数值的前后空格;对于 limit 参数,我们使用了 @positive 指令,该指令将在查询前检查参数值是否为正整数,否则将抛出一个错误。

示例代码

下面是一个类似于 GitHub API 的示例代码,展示了 GraphQL 中参数的用法:

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

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

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

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

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

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

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

在上面的例子中,我们定义了一个 Query 类型,其中包含一个 repository 字段,该字段接收两个必选参数 ownername,并返回一个 Repository 类型的值。

我们在 Repository 类型定义中定义了一个 issues 字段,该字段包含一个 IssueFilter 类型的参数。我们在 IssueFilter 类型定义中定义了 statecreatedBycreatedAftercreatedBefore 四个可选参数,用于过滤查询结果。

Issue 类型定义中,我们将一个枚举类型 IssueState 和一个自定义类型 User 作为参数使用。

结论

在 GraphQL 中,通过使用字段参数,我们可以更加灵活地获取我们所需的数据,并且可以使用参数指令对参数进行精细的控制。本文介绍了 GraphQL 中字段参数的用法,并提供了示例代码,希望对大家有所帮助。

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