我们正在将 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 不将错误列表包装在错误对象中。