GraphQL 是一种新兴的 API 访问方式,虽然带来了很多好处,但是也造成了一定的困扰。其中最明显的就是 GraphQL 错误处理。在本文中,我们将介绍一些常见的 GraphQL 错误,并提供解决方案和最佳实践。
GraphQL 错误类型
GraphQL 定义了多种错误类型,大致可以分为以下几类:
- 语法错误
- 运行时错误和验证错误
- 操作错误和请求错误
- 网络错误和超时错误
语法错误
在 GraphQL 中输入错误的语法会导致语法错误。GraphQL 引擎会在词法解析和语法解析期间抛出异常。例如:
{ user { id name }
上面的查询中,缺少了一个大括号,导致无法正确解析。这个错误可以通过在缺失的位置添加大括号来解决。
运行时错误和验证错误
GraphQL 引擎在执行查询时可能会抛出运行时错误。这些错误通常是由业务逻辑或数据异常引起的。例如:
-- -------------------- ---- ------- ----- - ---- - -- ------- - ------ ----- - - -
这个查询的目的是获取用户的头像和电子邮件。如果用户没有设置头像,则将返回 null。但是,如果用户没有设置电子邮件,则将引发异常。这种情况下,可以在用户输入时提示用户必须输入电子邮件。
操作错误和请求错误
GraphQL 服务器可能会发生操作错误或请求错误。操作错误可能是由于服务器端构建查询操作的问题,例如格式不正确或请求了不存在的字段等。请求错误是由于客户端向服务器发送无效数据或格式不正确的查询字符串。
mutation { createUser(input: { name: "Bob", email: "bob@example.com" }) }
上面的消息是一个包含输入错误的请求字符串。应该如下编写:
-- -------------------- ---- ------- -------- - ----------------- - ----- ------ ------ ----------------- -- - -- ---- ----- - -
网络错误和超时错误
GraphQL 服务器可以由于网络错误或连接超时而出错。这些错误通常是由于网络连接不稳定、服务器负载过高或其他网络问题引起的。在这种情况下,最好的解决方案是增加服务器和网络的容错性和健壮性。
解决方案和最佳实践
如何有效地处理 GraphQL 错误?以下是一些最佳实践:
返回有意义的错误信息
在遇到错误时,应该向客户端返回有关错误的有意义的信息,包括错误类型(例如,不能识别的字段、身份验证错误等),以及客户端需要采取的修复措施。
尽可能捕获错误
尽可能捕获 GraphQL 错误。这样可以避免将错误传递到其他子系统或组件。在客户端上,尽可能少地抛出错误可以减少意外中断。
在日志中记录错误
错误信息需要记录在日志中,以便开发人员能够调试和修复问题。
使用错误工具来验证查询和架构
使用错误工具可以帮助确保查询和架构的正确性。例如,Schema Validator 工具可以验证查询的正确性和编写有效的架构,并显示错误信息和警告。
编写明确的文档
最后,编写明确的文档是避免 GraphQL 错误的关键。包括如何正确地构建查询、有效的变量使用和避免常见的错误。
示例代码
以下是怎样在 GraphQL 中捕获错误的示例:
mutation updateUsername($username: String!) { updateUsername(username: $username) { id username } }
-- -------------------- ---- ------- ----- -------- ------------ --------- -- - ----- -------- - ----- ----------------- - ------- ------- -------- - --------------- ------------------- -- ----- ---------------- ---------- ------ - -------- ------------------------- -------- - ------------------------ ---------- - -- -------- - - -- --- --- ----- - ----- ------ - - ----- ---------------- -- -------- - ----- --- ------------------------- - ------ ----- -
以上代码演示了如何在客户端捕获 GraphQL 查询的错误。查询字符串包含变量,客户端使用 fetch 函数将查询字符串和变量发送到服务器。如果发生错误,客户端会抛出错误,以便稍后处理这些异常情况。
结论
尽管 GraphQL 错误很棘手,但是通过记录错误/异常、捕获异常、返回有意义的错误信息、使用工具验证查询和架构,以及编写清晰明确的文档等最佳实践,我们可以避免很多常见的错误,并确保构建的 GraphQL API 具有良好的性能和可靠性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/674d516ea336082f254c1dbd