graphql - AWS AppSync GraphQL - 使用联合作为突变返回导致错误
问题描述
我正在使用 AWS AppSync 创建一个 GraphQL 架构,并且我想将其Union
用作突变返回。我想这样写突变:
mutation addUpdateTariff($tariff: TariffInput!, $seasonalTimeTariff: [SeasonalTimeTariffInput!]) {
addUpdateTariff(tariff: $tariff, seasonalTimeTariff: $seasonalTimeTariff) {
id
type
values {
... on SteppedTariff {
endDate
}
... on SeasonalTimeTariff {
endDate
peakConsumption
}
}
}
}
但我收到了这个错误:
Request failed with status code 400
该字段values
可以是SteppedTariff
或类型SeasonalTimeTariff
,取决于addUpdateTariff
突变的输入。据我搜索,Union
仅在查询中使用,我没有找到一些文档告诉它不能以不同的方式使用。
我错过了什么或者我真的不能用Union
这种方式吗?
架构:
type Tariff {
id: ID!
type: TariffType!
values: [TariffValue!]
}
type SteppedTariff {
endDate: AWSDate
}
type SeasonalTimeTariff {
endDate: AWSDate
peakConsumption: Float
}
union TariffValue = SeasonalTimeTariff | SteppedTariff
测试关税值的不同模式:
values: [String]
询问:
mutation addUpdateTariff($tariff: TariffInput!, $seasonalTimeTariff: [SeasonalTimeTariffInput!]) {
addUpdateTariff(tariff: $tariff, seasonalTimeTariff: $seasonalTimeTariff) {
id
type
values
}
}
回复:
{
"data": {
"addUpdateTariff": {
"id": "843eadcf-48bd-4d58-93ec-8bbe96db3635",
"type": "SeasonalTime",
"values": [
"{endDate=2019-02-02}"
]
}
}
}
values: [SeasonalTimeTariff]
询问:
mutation addUpdateTariff($tariff: TariffInput!, $seasonalTimeTariff: [SeasonalTimeTariffInput!]) {
addUpdateTariff(tariff: $tariff, seasonalTimeTariff: $seasonalTimeTariff) {
id
type
values {
endDate
}
}
}
回复:
{
"data": {
"addUpdateTariff": {
"id": "7f77c5d9-2b06-4bb8-a678-10996addc4e1",
"type": "SeasonalTime",
"values": [
{
"endDate": "2019-02-02"
}
]
}
}
}
解决方案
您绝对可以在突变的返回类型上使用联合。确保您__typename
在值中包含该字段。您的解析器模板应返回如下内容:
{
"id": 1,
"type": "?",
"values": [
{
"__typename": "StepTariff",
"endDate": "2019-01-01"
},
{
"__typename": "SeasonalTimeTariff",
"endDate": "2019-01-01",
"peakConsumption": 1.0
}
]
}
推荐阅读
- css - 如何在 Semantic-UI-React 中使表格响应?
- spring - 测试域角色和方法安全权限表达式?
- c# - 在 JSON 中深度查找或搜索任何级别的键并在 c# 中替换其值
- java - 通过 HTTP 下载/上传 Java 大文件 - 客户端出现 OutOfMemoryError?
- sql - 从 AzureStorage 到 SQL 数据库的数据迁移
- performance - 为什么实例化/销毁在性能方面很差?
- git - 如果提交不包含 JIRA 编号,则 Stash/BitBucket 会阻止提交
- r - 差异分析和加权序列数据:我在哪里可以找到我的组变量?
- angular - Angular-Slickgrid 显示空白记录
- nfc - EMV 问题:无法读取标签 9F24,没有返回任何内容