【问题标题】:AWS AppSync GraphQL - using union as mutation return causes errorAWS AppSync GraphQL - 使用联合作为突变返回导致错误
【发布时间】:2019-10-31 01:08:39
【问题描述】:

我正在使用 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 可以是SteppedTariffSeasonalTimeTariff 类型,取决于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

测试关税值的不同模式:

  1. 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}"
      ]
    }
  }
}
  1. 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"
        }
      ]
    }
  }
}

【问题讨论】:

    标签: graphql aws-appsync


    【解决方案1】:

    您绝对可以在突变的返回类型上使用联合。确保在值中包含字段 __typename。您的解析器模板应返回如下内容:

    {
      "id": 1,
      "type": "?",
      "values": [
        {
          "__typename": "StepTariff",
          "endDate": "2019-01-01"
        },
        {
          "__typename": "SeasonalTimeTariff",
          "endDate": "2019-01-01",
          "peakConsumption": 1.0
        }
      ]
    }
    

    【讨论】:

      猜你喜欢
      • 2020-11-23
      • 2021-04-24
      • 2019-03-05
      • 2020-05-30
      • 2022-01-02
      • 2018-11-21
      • 2019-03-07
      • 2019-08-21
      • 2022-01-23
      相关资源
      最近更新 更多