我们正在将Apollo Graphql Server v1项目迁移到v2。
我们注意到错误响应格式有所变化。
在v2中,响应中的错误列表包装在一个错误对象中。
但是,在v1中并非如此。我们希望有一个一致的标准,而不是在v2中引入包装行为。
我了解GraphQL服务可能会通过以下链接中的扩展来添加其他字段。 链接: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服务器以不将错误列表包装在错误对象中。
答案 0 :(得分:1)
此行为在版本2中没有更改。ApolloServer生成符合规范的响应,并且不会不将任何结果错误包装在error
对象中。相反,这只是GraphQL Playground的a known bug。在2.0版中,Apollo Server从GraphiQL过渡到GraphQL Playground。 GraphiQL没有相同的问题,这就是为什么这看起来像是Apollo Server的错误。检查“网络”标签,然后查看服务器的实际响应-它实际上是预期格式。