初学 GraphQL - 了解 GraphQL 服务端错误

GraphQL 是一种新兴的 API 查询语言,由 Facebook 开发。它提供了更高效、更灵活、更强大的数据查询能力,以及对前端应用的更好支持。例如,可以通过 GraphQL 查询返回一个对象的子 Set,而不是整个对象,以提高速度和可用性。

然而,在 GraphQL 操作中,服务端出现错误是一件常见的事情,因此必要了解 GraphQL 服务端错误类型、出现的原因以及针对这些错误进行的适当处理。

服务端错误类型

出现 GraphQL 服务端错误时,GraphQL 有两类错误类型:可处理和不可处理。

可处理错误

在 GraphQL 查询调用时可能会出现可处理错误。例如,当客户端请求一个不存在的字段,或者提供无效参数时,GraphQL 会返回一个有效的错误响应,帮助客户端排除问题或进行必要的更正。

不可处理错误

GraphQL 还可能遇到不可处理错误,例如连接数据库失败或网络错误等等,这些错误通常是插件/组件/库层面的问题。当这些错误发生时,GraphQL 不会向客户端返回错误结果。这时,需要日志记录以便于追踪问题。

GraphQL 服务端错误原因

GraphQL, 服务端错误通常是由以下问题引起的:

  1. 数据库连接失败
  2. 数据库查询失败
  3. 网络错误
  4. 逻辑错误,例如以下两种可能的错误:
    1. 未经授权的操作
    2. 查询处理器逻辑错误

相应的错误处理方法

在对 GraphQL 的服务端错误进行处理时,需要对不可处理错误和可处理错误分别采取不同的方法。

不可处理错误

对于不可处理错误,需要记录日志并通知系统管理员。通常,这样做可以帮助系统管理员更好地了解系统的状况和问题,并及时地进行解决和优化。

以下是一种可能的记录日志的方式:

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

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

请注意,以上日志记录示例代码仅为参考,具体的日志记录方法可以根据您的实际情况进行更改。

可处理错误

对于可处理错误,GraphQL 提供了一种特别的方式,即向客户端返回有效的错误响应。 GraphQL 将查询解析/编译成 AST 后,会对查询使 AST 节点进行验证,进而将错误转化为 GraphQL 提供的标准错误对象,具体响应信息包括:query, locationsmessage.

例如,如果客户端请求属性 email 但服务端数据库中没有这个属性,那么 GraphQL 会返回类似于以下的错误响应:

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

可以根据需要返回其他类型的错误。通过自定义错误处理方法,您可以将 GraphQL 的自定义错误转化为自己的错误格式,这里以 'MyError' 为例:

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

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

        -------
    -

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

以上是自定义错误处理代码的示例,如有需要,可以根据自己的业务场景进行扩展。

结论

在互联网发展的时代,GraphQL 的发展也呈现了可喜的趋势。发生 GraphQL 服务端错误是很常见的事情,但您可以从上述信息中了解 GraphQL 服务端错误的化解方法,这样就能提高应用程序的质量及可靠性,使它变得更强壮。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/673457d90bc820c582488144