如何避免在 Apollo Server V2 的错误响应中将错误集合包装在错误对象中

2024-01-29

我们正在将 Apollo Graphql Server v1 项目迁移到 v2。

我们注意到错误响应格式发生了变化。

在 v2 中,响应中的错误列表包含在错误对象中。

但是,在 v1 中,情况并非如此。我们希望有一个一致的标准,并且不在 v2 中引入包装行为。

我了解 GraphQL 服务可能会通过扩展提供添加其他字段,如下面的链接所示。 关联:https://graphql.github.io/graphql-spec/June2018/#sec-Errors https://graphql.github.io/graphql-spec/June2018/#sec-Errors

我已经测试了 Apollo GraphQL V2,这就是它的实现方式。

在 v1 中,它符合预期。

在 v1 中,我们看到错误响应如下,


{
  "errors": [
    {
      "message": "Field \"announcement\" must not have a selection since type \"String\" has no subfields.",
      "locations": [
        {
          "line": 2,
          "column": 16
        }
      ]
    }
  ]
}

在 v2 中,我们看到错误响应如下,

{
  "error": {
    "errors": [
      {
        "message": "Field \"announcement\" must not have a selection since type \"String\" has no subfields.",
        "locations": [
          {
            "line": 2,
            "column": 16
          }
        ],
        "extensions": {
          "code": "GRAPHQL_VALIDATION_FAILED",
          "exception": {
            "stacktrace": [
             ...
            ]
          }
        }
      }
    ]
  }
}

在 v1 错误响应中,错误列表未包装在错误对象内。在 v2 中,它被包装在错误对象中。

但是,我的问题是为什么错误列表包裹在一个错误对象在 v2 中。 在 v1 中,响应中只有错误列表。

我们遵循所有服务(REST 和非 REST)的标准,使其具有标准格式,并且符合 v1 版本。但是,现在我们看到它已被包装在错误对象中。

有什么方法可以配置 Apollo Server 不将错误列表包装在错误对象中。


此行为在版本 2 中没有改变。Apollo Server 生成符合规范的响应,并且不not将任何产生的错误包装在error目的。相反,这只是一个已知的错误 https://github.com/prisma/graphql-playground/issues/898与 GraphQL Playground。在 2.0 版本中,Apollo Server 从 GraphiQL 过渡到 GraphQL Playground。 GraphiQL 没有同样的问题,这就是为什么这看起来像是 Apollo Server 的错误。检查网络选项卡并查看服务器的实际响应 - 它实际上是预期的格式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何避免在 Apollo Server V2 的错误响应中将错误集合包装在错误对象中 的相关文章

随机推荐