上一个当我使用RestAPI制作API服务器时,我返回带有HTTP状态代码的数据。
因此,前端从服务器接收状态代码,确定请求成功失败。
我知道graphQL具有错误字段,可以参考它来解决此问题。
但是我想更改发送给客户端的响应状态代码。
这种方法是正确和稳定的方法吗?
或者,当使用graphQL时,不更改状态代码,仅由错误字段确定是标准方法吗?
任何建议将不胜感激:)
谢谢。
答案 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为服务器生成可抛出的错误类,并简化了客户端的错误处理。