全书目录

第十六篇:GraphQL 完全指南 —— 智能问询总台宇宙

第十章:错误处理 —— 总台答不全时,回执也要规范

1 分钟 406 字 第 314 / 962 个阅读单元

GraphQL 的错误处理非常有特色,因为它允许部分成功

典型响应长这样:

json
{
  "data": {
    "resident": {
      "id": "r-1001",
      "name": "林岚",
      "tickets": [
        {
          "id": "t-501",
          "title": "空调异响",
          "device": null
        }
      ]
    }
  },
  "errors": [
    {
      "message": "设备 d-404 不存在",
      "path": ["resident", "tickets", 0, "device"]
    }
  ]
}

这表示:

  • 整张问询单不是全挂
  • 大部分数据拿到了
  • 只是某个具体字段出错
  • 所以 dataerrors 可以同时存在

你要区分三类问题:

  1. 请求错误 比如语法错、字段名不存在、变量类型不匹配
    这种错误通常在执行前就被拦下,往往没有 data

  2. 字段执行错误 比如某个 resolver 抛错、非空字段却返回了 null
    这种情况常见于执行中,可能有部分 data

  3. 网络/HTTP 错误 比如超时、反向代理失败、请求头不对

一张总记忆图:

text
语法/校验错
  -> 没开始办理
  -> 通常只有 errors

某个字段办理失败
  -> 已部分办理
  -> data + errors

网络层失败
  -> 总台都没接到或没回出来
  -> 由 HTTP/客户端错误处理负责

实践里还要多记一件事:

  • 400 常见于解析或校验错误
  • 某些 GraphQL 响应即使带 errors,HTTP 也可能仍是 200/2xx
  • 因为“HTTP 成功”不等于“每个字段都成功”

所以前端处理 GraphQL,不能只看 HTTP 状态码,还要看响应体里的 errors