Appsync 查询联合 return 类型抛出 400
Appsync query union return type throws 400
我有两种类型 Stream
和 Video
以及一个 listResources
查询 return 是流和视频的混合列表:
type Stream {
pk: String!
starts_at: String!
}
type Video {
pk: String!
created_at: String!
}
union SearchResult = Stream | Video
type Query {
listResources(code: String!): [SearchResult]
}
下面是调用查询的示例:
query {
listResources(code: "234") {
... on Stream {
pk
starts_at
}
... on Video {
pk
created_at
}
}
}
出于某种原因,即使查询应该根据 appsync 和 graphql 文档 (https://graphql.org/learn/schema/#union-types, https://docs.aws.amazon.com/appsync/latest/devguide/interfaces-and-unions.html) 正确形成,查询也会抛出 400 错误。
- 已经在本地和 cloudwatch 中检查了 lambda,lambda returns 数据正确。
- 如果我将
listResources
查询的 return 类型更改为 AWSJSON
,数据将得到正确的 returned,这确认了 lambda 的正确功能。错误必须是查询 return 类型或架构定义。
罪魁祸首可能在哪里?
你现在可能已经解决了这个问题,但我猜问题可能是你没有在你的代码中返回 __typename,所以 AppSync 不知道它返回的是联合中的什么类型。它应该返回,例如:
{
__typename: 'Stream',
克:1,
starts_at: '2022-01-07'
}
我有两种类型 Stream
和 Video
以及一个 listResources
查询 return 是流和视频的混合列表:
type Stream {
pk: String!
starts_at: String!
}
type Video {
pk: String!
created_at: String!
}
union SearchResult = Stream | Video
type Query {
listResources(code: String!): [SearchResult]
}
下面是调用查询的示例:
query {
listResources(code: "234") {
... on Stream {
pk
starts_at
}
... on Video {
pk
created_at
}
}
}
出于某种原因,即使查询应该根据 appsync 和 graphql 文档 (https://graphql.org/learn/schema/#union-types, https://docs.aws.amazon.com/appsync/latest/devguide/interfaces-and-unions.html) 正确形成,查询也会抛出 400 错误。
- 已经在本地和 cloudwatch 中检查了 lambda,lambda returns 数据正确。
- 如果我将
listResources
查询的 return 类型更改为AWSJSON
,数据将得到正确的 returned,这确认了 lambda 的正确功能。错误必须是查询 return 类型或架构定义。
罪魁祸首可能在哪里?
你现在可能已经解决了这个问题,但我猜问题可能是你没有在你的代码中返回 __typename,所以 AppSync 不知道它返回的是联合中的什么类型。它应该返回,例如: { __typename: 'Stream', 克:1, starts_at: '2022-01-07' }