AWS AppSync GraphQL-使用union作为变异返回会导致错误

AWS AppSync GraphQL-使用union作为变异返回会导致错误,graphql,aws-appsync,Graphql,Aws Appsync,我正在使用AWS AppSync创建一个GraphQL模式,我想使用Union作为返回。我想这样写: mutation addUpdateTariff($tariff: TariffInput!, $seasonalTimeTariff: [SeasonalTimeTariffInput!]) { addUpdateTariff(tariff: $tariff, seasonalTimeTariff: $seasonalTimeTariff) { id type va

我正在使用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
字段
可以是
步进tariff
季节性metariff
类型,取决于
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
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}"
      ]
    }
  }
}
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"
        }
      ]
    }
  }
}
测试关税值的不同模式:

type Tariff {
  id: ID!
  type: TariffType!
  values: [TariffValue!]
}

type SteppedTariff {
  endDate: AWSDate
}

type SeasonalTimeTariff {
  endDate: AWSDate
  peakConsumption: Float
}

union TariffValue = SeasonalTimeTariff | SteppedTariff
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}"
      ]
    }
  }
}
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"
        }
      ]
    }
  }
}
  • 值:[字符串]
  • 查询:

    type Tariff {
      id: ID!
      type: TariffType!
      values: [TariffValue!]
    }
    
    type SteppedTariff {
      endDate: AWSDate
    }
    
    type SeasonalTimeTariff {
      endDate: AWSDate
      peakConsumption: Float
    }
    
    union TariffValue = SeasonalTimeTariff | SteppedTariff
    
    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}"
          ]
        }
      }
    }
    
    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"
            }
          ]
        }
      }
    }
    
    响应:

    type Tariff {
      id: ID!
      type: TariffType!
      values: [TariffValue!]
    }
    
    type SteppedTariff {
      endDate: AWSDate
    }
    
    type SeasonalTimeTariff {
      endDate: AWSDate
      peakConsumption: Float
    }
    
    union TariffValue = SeasonalTimeTariff | SteppedTariff
    
    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}"
          ]
        }
      }
    }
    
    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"
            }
          ]
        }
      }
    }
    
  • 值:[seasurealtimetariff]
  • 查询:

    type Tariff {
      id: ID!
      type: TariffType!
      values: [TariffValue!]
    }
    
    type SteppedTariff {
      endDate: AWSDate
    }
    
    type SeasonalTimeTariff {
      endDate: AWSDate
      peakConsumption: Float
    }
    
    union TariffValue = SeasonalTimeTariff | SteppedTariff
    
    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}"
          ]
        }
      }
    }
    
    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"
            }
          ]
        }
      }
    }
    
    响应:

    type Tariff {
      id: ID!
      type: TariffType!
      values: [TariffValue!]
    }
    
    type SteppedTariff {
      endDate: AWSDate
    }
    
    type SeasonalTimeTariff {
      endDate: AWSDate
      peakConsumption: Float
    }
    
    union TariffValue = SeasonalTimeTariff | SteppedTariff
    
    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}"
          ]
        }
      }
    }
    
    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"
            }
          ]
        }
      }
    }
    

    您完全可以在突变的返回类型上使用联合。确保在值中包含字段
    \uuu typename
    。您的冲突解决程序模板应返回如下内容:

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