GraphQL 中的错误处理:最佳实践

阅读时长 5 分钟读完

GraphQL 是一种新兴的 web 应用程序开发协议,旨在解决 REST API 中存在的一些痛点。它提供了一种基于类型系统的查询语言,通过定义客户端需要哪些数据来提高查询效率和灵活性。与 REST API 不同的是,GraphQL 在执行过程中可能会返回多个错误。

在本文中,我们将讨论在 GraphQL 中错误处理的最佳实践。我们将介绍如何识别和处理 GraphQL 中的错误,并提供一些示例代码来演示如何在应用程序中实现这些最佳实践。

1. 错误处理策略

GraphQL 查询中的错误可以分为两类:常规错误和状态错误。常规错误是指与应用程序状态无关的错误,例如输入不正确或者错误的身份验证信息。状态错误则是针对目标资源的错误,例如请求未找到或请求无效。

在处理 GraphQL 中的错误时,我们需要遵循以下的策略:

1.1 统一处理错误

为了避免重复代码和增加代码的复杂性,我们需要在应用程序中统一处理所有错误。这可以通过使用中央错误处理程序或者框架中的错误机制来实现。

1.2 返回关键信息

GraphQL 应该返回有意义的错误信息,以便于客户端能够理解并且适当地处理错误。

1.3 区分常规错误和状态错误

对于常规错误,我们应该返回适当的 HTTP 状态码。对于状态错误,我们应该返回更具体的错误信息以方便客户端做出正确的行动。

2. 最佳实践

2.1 使用 GraphQL Error 类型

GraphQL 中有一个内置的 Error 类型,它可以轻松地表示错误信息。该类型包含字符串型的 message 字段和一个可选的路径字段,用于指定出错的哪个操作。

该类型可以用于任何错误信息,而不仅仅是执行查询所引发的错误。因此,使用该类型的好处是能够轻松处理所有类型的错误,并与客户端交互。

2.2 使用 GraphQL Extension

Extensions 在 GraphQL 中提供了一种机制,它允许我们自定义处理程序,以便在查询期间执行某些任务。Extensions 中的信息可以通过对 GraphQLResponse 扩展来添加,这使得返回的响应数据集更具可读性。

下面的示例演示了如何在 GraphQL 中设置 Extensions,以便返回错误信息:

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

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

上述代码中 useExtensions 函数接受 requestContext 作为参数,可以从它中获取更多关于查询的信息。

Extensions 使错误处理更加灵活,可以将错误信息集成到响应中,避免了显式地返回错误信息的需要。

2.3 使用 Graphql-middleware

如果您正在使用 Node.js,可以使用 graphql-middleware 来处理 GraphQL 查询中的错误。它是一个针对 GraphQL 的高级中间件,可以在执行查询之前和之后执行函数。

下面的示例演示了如何在 GraphQL 中使用 graphql-middleware 来处理错误:

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

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

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

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

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

在上述示例中,我们定义了一个权限模块和一个中间件模块。中间件模块每次执行查询时都会被调用,根据定义检查用户是否有权执行该查询。

如果用户未通过身份验证,则会抛出一个未经授权的错误。

它可以将错误与某些读取器或其他处理程序捆绑在一起,并通过中间件机制来统一处理所有错误。

结论

本文介绍了 GraphQL 中的错误处理的最佳实践。我们讨论了如何识别常规错误和状态错误,以及如何返回适当的错误信息。我们还介绍了使用 GraphQL Error 类型、Extensions 和 graphql-middleware 的技术,并提供了示例代码来演示这些实践。

在应用程序中正确地处理错误是构建健壮和稳定的应用程序的关键。通过遵循本文介绍的最佳实践,您可以更好地处理所有类型的错误,并将其与客户端交互。

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

纠错
反馈