代码之家  ›  专栏  ›  技术社区  ›  Hide

带状态代码的graphql是正确的解决方案吗?

  •  1
  • Hide  · 技术社区  · 6 年前

    以前,当我使用restapi创建api服务器时,我使用http状态代码返回数据。

    所以,前端从服务器接收状态码,它决定了请求是否成功失败。

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

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

    这种方法正确稳定吗?

    或者,在使用graphql时,不要更改状态代码,只需通过错误字段确定是标准方法吗?

    如有任何建议,我们将不胜感激:)

    谢谢。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Glenn Sonna    6 年前

    […]不更改状态代码,只按错误字段确定是标准方法吗?

    是不使用状态代码管理错误,它们是 HTTP协议 相关和 graphql旨在成为协议/框架不可知论者 所以你所需要的一切都应该在你的输出中。

    正如你所说 errors 回答中的字段:

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

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

    规范规定: 错误 字段条目可以有一个名为 extensions :

    graphql服务可能提供一个额外的条目,用于键扩展错误。如果设置了该项,则该项的值必须为map。此条目是为实现人员保留的,以向错误添加其他信息,无论它们认为如何合适,并且对其内容没有其他限制。

    使用 扩展 字段可以将自定义的机器可读信息添加到错误中,如键 代码 在这里。

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