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 字段和一个可选的路径字段,用于指定出错的哪个操作。
type GraphQLError { message: String! path: [String] }
该类型可以用于任何错误信息,而不仅仅是执行查询所引发的错误。因此,使用该类型的好处是能够轻松处理所有类型的错误,并与客户端交互。
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