完整的 GraphQL 错误处理指南:如何处理错误和响应

阅读时长 6 分钟读完

GraphQL 是一种用于 API 开发的强类型查询语言,具有高度的可自定义性和灵活性。在构建 GraphQL API 的过程中,完整的错误处理非常重要,因为它对于正确处理错误信息、有效地返回错误响应和确保 API 的可靠性至关重要。

本文将为您提供完整的 GraphQL 错误处理指南,包括如何处理和响应错误,如何设置异常处理程序和如何处理字段级错误。此外,我们还将提供示例代码和实战经验,以帮助您实现高效的错误处理。

GraphQL 错误处理的基本原则

在开始讨论 GraphQL 错误处理之前,让我们了解一些基本原则:

  1. 错误代码应该被清晰定义并与错误消息相匹配。
  2. 错误信息应该清晰、有意义,方便定位问题。
  3. 错误信息不应该包含安全敏感信息。
  4. 错误信息应该对于开发人员易于调试,对于客户端用户易于理解。

处理和响应 GraphQL 错误

GraphQL 的设计使得错误处理和响应非常透明,使得开发者可以方便地应对任何错误、异常或者类似问题。GraphQL 规范定义了一个标准的错误格式,根据这个格式,我们可以方便地进行错误响应。

GraphQL 定义的错误格式如下:

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

其中,errors 数组包含一个或多个错误对象,每个错误对象都具有以下属性:

  • message: 错误消息,描述错误的原因,是必需的。
  • locations: 一个数组,表示错误发生的位置,可以用于定位错误,可以选择提供。
  • path: 表示错误请求的 JSON 路径的数组,可选择提供。对于多个嵌套字段的请求尤为重要。
  • extensions: 表示一个与错误相关的任意 JSON 对象,可以包含有关错误的任意信息。

当出现错误时,GraphQL 返回的响应将包含 errors 数组,以及可选的完整或部分的 data 对象。如果在错误发生时仍然能够正常的获取数据,则 data 仍然有效,否则 data 可能为 null

处理常规错误

在 GraphQL 领域,常规错误主要分为两类:

  1. 语法错误,例如输入了无法被识别的字符。
  2. 运行时错误,例如输入的查询中引用了一个不存在的字段。

对于语法错误,我们可以通过捕获错误对象并将其包装在 GraphQL 错误对象中来处理它。对于运行时错误,我们需要进行更具体的错误处理。

我们可以通过在 GraphQL resolvers 中捕获异常,然后将其包装在 GraphQL 错误对象中来处理运行时错误。您可以通过以下方法将异常抛出并打印出详细错误信息:

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

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

这样,当错误出现时,我们可以更轻松地进行调试和处理,因为 GraphQL 和 Apollo Server 会根据定义的 formatError 方法进行错误响应。

处理字段错误

GraphQL 可以在字段级别上进行错误处理,其中每个类型的字段都可以自己定义一个解析器来处理自己的错误。这样,我们可以更细粒度地了解错误存在的地方,并针对特定的操作进行错误处理。

在类型定义中,为每个字段定义一个解析器,再在解析器中进行错误处理,示例如下:

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

在上面的代码中,我们将用户实体的名称字段进行了解析,并在该字段的解析器中检查了用户名称的有效性。这样,在构建筛选查询时,我们可以更轻松地检查筛选器参数是否有效。

通过这种分层的错误处理方式,我们可以根据特定操作的情况指定更加详细且特定的错误信息,从而更加准确地定位问题,提高可靠性。

设置异常处理程序

Node.js 中的异常处理机制使其成为一个非常灵活的开发环境,允许我们在 JavaScript 中对每个异常进行快速进入,进行手动处理。GraphQL 遵循这种异常处理模式,从而可以有效地建立和管理异常处理机制。

在 GraphQL 中,您可以通过设置异常处理程序(Error Handler)来自定义异常处理。这是通过设置 GraphQL 的执行器和解析器中的 formatError 函数实现的。

举个例子,在 Apollo Server 3 中您可以如下设置异常处理程序:

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

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

在这里,我们为 Apollo Server 设置了一个格式化错误程序,这样我们就可以按照自己的方式打印和处理 GraphQL 抛出的所有异常。

如何避免出现错误

在处理 GraphQL API 错误时,一个好的方式是在 API 中尽量避免出现错误,这样可以有效地降低在运行时出现错误的可能性,提高代码效率。

以下是一些避免出现 GraphQL 错误的建议:

  1. 稳定 API:在部署 API 之前,应确保它可以正常工作并具备稳定性和可扩展性。
  2. 模式验证:在定义和使用 GraphQL 模式时应进行详细和全面的验证,以避免类型和字段等错误。
  3. 参数验证:在进行查询时,应确保为所有必需参数设置值,并验证值的范围是否符合预期。
  4. 规范标准:遵循 GraphQL 标准,使用标准验证工具来确保极大的兼容性和稳定性。

结论:

在编写 GraphQL API 时,错误处理是非常重要的。通过了解 GraphQL 错误处理的基本原则和最佳实践,以及了解如何处理常规错误和字段错误,以及如何设置异常处理程序,可以使您的 GraphQL API 更加健壮、可靠并具有高度的安全性。同时也可以保障开发的高效率。

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

纠错
反馈