GraphQL 健壮性:如何正确处理错误

阅读时长 5 分钟读完

GraphQL是一种用于构建API的查询语言。它具有许多独特的特性,例如它允许客户端精确地指定需要获取的数据,并且在单个网络请求中检索所有必需的数据,从而减少了请求次数。另外一个优点是它的高度可组合性,这使得开发人员可以更容易地扩展和修改已有的API。然而,这些特性也会带来一些挑战,特别是在处理错误方面。在本文中,我们将探讨如何正确处理GraphQL中的错误。

错误处理

在GraphQL中,错误可以是两种类型:语法错误和运行时错误。语法错误是解析查询时发生的错误,在查询中有不合法的语法或未知的字段。运行时错误是在执行查询时发生的错误,例如数据库连接失败或数据不存在。这两种错误都需要在API响应中返回,以便客户端可以正确地处理它们。

GraphQL定义了一个标准的错误对象,该对象具有以下字段:

  • message - 错误的描述
  • locations - 错误发生的位置
  • path - 引起错误的字段或查询路径

在处理错误时,我们需要将错误信息包装在这个对象中,并将其添加到响应中。

语法错误

语法错误是指在解析查询时发生的错误。GraphQL提供了一个parse函数,该函数将接收一个字符串,并返回解析后的查询对象。如果查询不合法,则parse函数将抛出SyntaxError。下面是一个示例代码:

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

在这个例子中,我们捕获了parse函数可能抛出的SyntaxError,并将其转换为GraphQL错误对象。

运行时错误

运行时错误是在执行查询时发生的错误。基本上,这些错误是从你的应用程序中抛出的异常。由于GraphQL查询可以调用多个解析器,因此可能出现多个运行时错误。为了处理这些错误,我们需要在API中使用try-catch块,并将错误信息添加到GraphQL错误对象中。

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

在这个例子中,我们使用了GraphQL自带的graphql函数来执行查询。如果出现错误,则我们捕获错误并将其转换为GraphQL错误对象。请注意,我们还检查了错误对象中的locations,path和extensions字段。

提供更多细节信息

GraphQL错误对象的extensions字段可以用于提供更多细节信息,例如错误码或堆栈跟踪。下面是一个GraphQL错误对象的示例:

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

在这个例子中,我们使用了extensions字段来提供错误码和堆栈跟踪信息。

结论

在本文中,我们探讨了如何正确处理GraphQL中的错误。我们了解了GraphQL错误对象的结构,并学习了如何处理语法错误和运行时错误。我们还学习了如何使用extensions字段来提供更多细节信息。最后,我建议您在开发GraphQL API时将错误处理视为非常重要的一部分。虽然GraphQL提供了很多有用的功能,但处理错误需要一些额外的工作。

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

纠错
反馈