Ошибка GraphQL FieldsConflict: поля имеют разные формы списка - PullRequest
0 голосов
/ 21 июня 2019

Я использую сервер GraphQL AWS AppSync со следующей (упрощенной) схемой:

type Query {
  getIssue(id: String!): Issue
}

type Issue {
  id: String!
  data: IssueData!
}

type Event {
  id: String!
  time: AWSDateTime!
  status: [String]
}

type Payment {
  id: String!
  amount: Int!
  status: String
}

union IssueData = Event | Payment

Когда я делаю запрос, включающий встроенных фрагментов , чтобы выбрать status в качествепотомок типа Event или Payment в поле Issue/data, я получаю ошибку FieldsConflict :

query getIssue($id: String!) {
  getIssue(id: $id) {
    id
    data {
      ... on Event {
        time
        status
      }
      ... on Payment {
        amount
        status
      }
    }
  }
}

Ошибка проверки типа FieldsConflict:status: поля имеют разные формы списка @ 'getIssue / data'

Это, вероятно, вызвано тем, что поле Event/status возвращает массив строк, а поле Payment/status возвращает одну строку.

Почему GraphQL считает это конфликтом?Как мне создать свой запрос, чтобы разрешить доступ к полю состояния для обоих типов данных?

Обратите внимание, что я использую объединение, а не расширенный интерфейс, потому что типы Issue и Payment не имеют общихструктура данных.

1 Ответ

1 голос
/ 21 июня 2019

Из spec :

Если во время выполнения встречаются множественные выборки полей с одинаковыми именами ответов, поле и аргументы для выполнения и полученное значение должны быть однозначными.Поэтому любые два выбора полей, которые могут встречаться для одного и того же объекта, действительны только в том случае, если они эквивалентны.

Вы можете решить проблему, указав псевдоним поля для одного или обоих полей:

query getIssue($id: String!) {
  getIssue(id: $id) {
    id
    data {
      ... on Event {
        time
        eventStatus: status
      }
      ... on Payment {
        amount
        status
      }
    }
  }
}

Переименование одного или обоих полей в вашей схеме, очевидно, также решит проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...