首页 > 解决方案 > 带有状态码的 GraphQL 是正确的解决方案吗?

问题描述

上一页 当我使用 RestAPI 制作 API 服务器时,我返回带有 HTTP 状态码的数据。

因此,前端从服务器接收状态码,它确定请求是成功还是失败。

我知道graphQL有错误字段,可以参考它来解决这个问题。

但我想更改发送给客户端的响应状态代码。

这种方式是正确且稳定的方式吗?

或者,当使用graphQL时,不要更改状态码,只通过错误字段确定是标准方式吗?

任何建议,将不胜感激 :)

谢谢。

标签: graphql

解决方案


[...] 不更改状态代码,仅通过错误字段确定是标准方式吗?

YES 不使用状态码管理错误,它们与Http相关,GraphQL 旨在与协议/框架无关,因此您需要的一切都应该在输出中。

正如您所说errors,您的回复中可能有一个字段:

响应中的错误条目是一个非空错误列表,其中每个错误都是一个映射。

如果在请求的操作期间没有遇到错误,则错误条目不应出现在结果中。

规范指出,errors字段条目可以有一个名为的字段extensions

GraphQL 服务可能会通过键扩展为错误提供额外的条目。此条目(如果设置)必须有一个映射作为其值。此条目是为实现者保留的,可以在他们认为合适的情况下向错误添加其他信息,并且对其内容没有其他限制。

使用该extensions字段,您可以将自定义机器可读信息添加到错误中,例如此处的关键代码

{
  "errors": [
    {
      "message": "Name for character with ID 1002 could not be fetched.",
      "locations": [ { "line": 6, "column": 7 } ],
      "path": [ "hero", "heroFriends", 1, "name" ],
      "extensions": {
        "code": "CAN_NOT_FETCH_BY_ID",
        "timestamp": "Fri Feb 9 14:33:09 UTC 2018"
      }
    }
  ]
}

阿波罗预言

为了使错误管理更容易,我创建了一个 codegen CLI,它为服务器生成可抛出的错误类并促进客户端的错误处理。

https://github.com/theGlenn/apollo-prophecy


推荐阅读