带有状态码的GraphQL是正确的解决方案?

时间:2018-07-03 02:50:46

标签: graphql

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

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

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

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

这种方法是正确和稳定的方法吗?

或者,当使用graphQL时,不更改状态代码,仅由错误字段确定是标准方法吗?

任何建议将不胜感激:)

谢谢。

1 个答案:

答案 0 :(得分:3)

  

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

是的,不使用状态码来管理错误,它们与 Http 相关,并且 GraphQL旨在与协议/框架无关”,因此您需要的所有内容都应位于输出中。

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

  

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

     

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

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

  

GraphQL服务可以通过键扩展为错误提供附加条目。如果设置了该条目,则其值必须具有一个映射。此项保留给实现者,用于为错误添加附加信息,但他们认为合适,并且对其内容没有附加限制。

使用extensions字段,您可以在错误中添加自定义的机器可读信息,例如此处的键 code

{
  "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"
      }
    }
  ]
}

阿波罗预言

为了简化错误管理,我创建了一个代码生成CLI,该CLI为服务器生成可抛出的错误类,并简化了客户端的错误处理。

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