如何正确的在 GraphQL 中处理查询错误和验证错误?

阅读时长 5 分钟读完

GraphQL 是一种用于构建 API 的查询语言,它允许客户端指定需要返回的数据,而不是由服务器来决定。由于 GraphQL 的灵活性和可扩展性,它已经成为前端开发的热门技术之一。然而,在使用 GraphQL 时,我们可能会遇到查询错误和验证错误,这些错误可能会导致客户端的应用程序崩溃或出现意外行为。在本文中,我们将探讨如何正确的在 GraphQL 中处理这些错误,并提供示例代码和指导意义。

查询错误

在 GraphQL 中,查询错误可能会导致服务器返回错误的响应,这可能是由于查询参数不正确或服务器内部错误造成的。以下是一些处理查询错误的最佳实践:

1. 错误处理

在 GraphQL 中,我们可以使用 try-catchPromise.catch() 来捕获查询错误。例如:

或者

2. 错误格式

当服务器返回错误响应时,我们应该尽可能提供有意义的错误信息。GraphQL 规范定义了一种标准错误格式,如下所示:

在实现 GraphQL API 时,我们应该尽可能使用这种标准错误格式。

3. HTTP 状态码

当服务器返回错误响应时,我们应该使用适当的 HTTP 状态码来表示错误类型。例如:

  • 400 Bad Request:查询参数不正确
  • 401 Unauthorized:未授权访问
  • 403 Forbidden:禁止访问
  • 404 Not Found:查询的资源不存在
  • 500 Internal Server Error:服务器内部错误

验证错误

在 GraphQL 中,验证错误可能会导致查询失败,这可能是由于查询参数不合法或不符合预期的规则造成的。以下是一些处理验证错误的最佳实践:

1. 自定义验证规则

GraphQL 允许我们通过自定义验证规则来验证查询参数是否符合预期的规则。例如:

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

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

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

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

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

在上面的示例中,我们定义了一个自定义验证规则,它检查查询中是否包含密码字段,并在发现错误时报告错误。

2. GraphQL 错误

当验证错误发生时,我们应该使用 GraphQLError 对象来表示错误类型。例如:

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

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

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

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

在上面的示例中,我们使用 result.errors 来检查是否有验证错误发生,如果有则使用 GraphQLError 对象来表示错误类型。

结论

在本文中,我们探讨了如何正确的在 GraphQL 中处理查询错误和验证错误,并提供了示例代码和指导意义。在实现 GraphQL API 时,我们应该遵循这些最佳实践,以确保客户端的应用程序能够正确的处理错误,并提供有意义的错误信息。

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

纠错
反馈