GraphQL 中的 null 值处理的最佳实践

阅读时长 5 分钟读完

在使用 GraphQL 进行 Web 开发时,我们经常会遇到处理 null 值的情况。然而,对于初学者而言,如何在 GraphQL 中处理 null 值可能会非常棘手。这篇文章将介绍 GraphQL 中处理 null 值的最佳实践,并提供一些实用的示例代码。

什么是 null 值?

在 GraphQL 中,null 值指的是一个变量的值不存在。当一个字段的值为空时,GraphQL 会将其解释为空值,也就是 null。需要注意的是,null 值与 undefined 值不同。undefined 值指的是 JavaScript 中的一种特殊类型,而 null 值表示某个字段在数据库中没有值。

null 值在 GraphQL 中的表现

在 GraphQL 中,null 值表示一个可选的字段可以没有值。这就意味着,如果一个字段可以为空,就需要在类型定义中明确表示该字段可以为 null 值。例如,如果我们有一个类型定义如下:

在上面的定义中,id 和 name 两个字段被标记为必填项,而 email 字段则没有被标记为必填项。这就意味着 email 字段可以为空。如果我们查询一个用户并且该用户没有 email 值,则 GraphQL 会返回一个如下的响应:

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

可以看到,GraphQL 返回了一个 email 字段的值为 null。这意味着 email 字段确实被查询到了,只不过它的值是空的。

最佳实践

在 GraphQL 中处理 null 值有许多最佳实践,下面是一些值得注意的点。

1. 明确区分 null 值和空值

在 GraphQL 中,null 值表示一个可选的字段可以没有值。这就意味着,如果一个字段可以为空,就需要在类型定义中明确表示该字段可以为 null 值。需要注意的是,如果查询返回了一个空值,该值并不等同于 null 值。在 GraphQL 中,空值是合法的非 null 值,例如:

假如查询的 field 字段确实存在,但在数据库中该字段没有值,那么查询会返回一个空值,而不是 null 值。

2. 使用默认值

当字段返回 null 值时,我们可以设置一个默认值来代替 null 值。例如,如果查询结果如下:

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

我们可以在查询中设置一个默认值,如下所示:

在上面的查询中,当 email 字段返回 null 值时,我们将其设置为默认值 "No email"。这将确保我们总是有一个非空值返回。

3. 使用 fragments 处理 null 值

在 GraphQL 中,我们可以使用 fragments 创造一个可复用的查询。如果我们需要在多个查询中使用该查询,则使用 fragments 将会大大简化代码。但是,当我们使用 fragments 时,需要注意一个问题:如果 fragment 中的字段返回了 null 值,那么整个查询都将返回 null 值。

为了解决这个问题,我们可以在查询中使用 coalesce 函数。coalesce 函数将在接收到 null 值时返回一个默认值。例如,假设我们有如下查询:

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

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

在上面的查询中,我们使用了 fragments EmailDetails 处理 email 相关的细节。但是,如果用户没有 email 值,则查询将返回 null 值。为了避免这种情况,我们可以使用 coalesce 函数,如下所示:

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

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

在上面的查询中,当 email 和 emailVerified 字段返回 null 值时,我们将它们分别设置为 "" 和 false。这将确保我们总是有一个非空值返回。

示例代码

下面是一些实用的示例代码。

使用默认值

使用 fragments 处理 null 值

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

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

总结

在 GraphQL 中处理 null 值是一项非常重要的任务。当我们处理 null 值时,需要明确区分 null 值和空值,并使用默认值和 fragments 处理 null 值。希望这篇文章能够帮助您理解 GraphQL 中的 null 值处理最佳实践,并在实际开发中提供一些指导意义。

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

纠错
反馈