AWS AppSync GraphQL - использование объединения в качестве возврата мутации приводит к ошибке - PullRequest
0 голосов
/ 17 июня 2019

Я создаю схему GraphQL с помощью AWS AppSync и хочу использовать 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

Проверка различных схем для значений тарифа:

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

1 Ответ

1 голос
/ 11 июля 2019

Вы можете определенно использовать Unions в типах возврата для мутаций.Убедитесь, что вы включили поле __typename в свои значения.Ваш шаблон распознавателя должен возвращать что-то вроде этого:

{
  "id": 1,
  "type": "?",
  "values": [
    {
      "__typename": "StepTariff",
      "endDate": "2019-01-01"
    },
    {
      "__typename": "SeasonalTimeTariff",
      "endDate": "2019-01-01",
      "peakConsumption": 1.0
    }
  ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...