【问题标题】:GraphQL with status code is correct solution? [duplicate]带有状态码的 GraphQL 是正确的解决方案吗? [复制]
【发布时间】:2018-12-11 06:16:48
【问题描述】:

Previous 当我用 RestAPI 做 API 服务器时,我返回带有 HTTP 状态码的数据。

所以,前端收到服务器的状态码,判断请求是成功还是失败。

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

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

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

或者,在使用graphQL时,不改变状态码,只通过错误字段来判断是标准方式吗?

任何建议将不胜感激:)

谢谢。

【问题讨论】:

    标签: graphql


    【解决方案1】:

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

    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

    【讨论】:

    • 感谢详细回复:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多