Проблема с определением схемы graphQL для объекта - PullRequest
0 голосов
/ 30 марта 2019

У меня есть объект с некоторыми свойствами, но я не могу определить схему. Структура объекта

{
    "1": {
        average: 40,
        count: 15
    },
    "2": {
        average: 11,
        count: 2
    },
    "3": {
        average: 30,
        count: 2
    }
}

Моя схема

const typeDef = gql`
 type Query {
   scoreByRank: Count
}

type Count {
  "1": obj
  "2": obj
  "3": obj
}

type obj{
average: Int
count: Int
}
`;

Но этот запрос не выполняется из-за объекта prop с "1", "2" и т. Д. Есть ли лучший способ построить эту схему?

1 Ответ

1 голос
/ 30 марта 2019

Имена полей GraphQL должны соответствовать определенным правилам. В частности /^[_a-zA-Z][_a-zA-Z0-9]*$/. Как видите, имя поля не должно начинаться с цифры 0-9. Определенные имена полей могут быть неудобны для потребителя вашего API GraphQL в зависимости от того, какие языки они используют. Ограничения имени поля определены так, что большинство распространенных языков могут легко использовать данные, предоставляемые GraphQL API.

Рекомендуемое решение состоит в том, чтобы следовать правилам и придумывать лучшие имена полей, такие как _1, two или field3.

Вы можете вернуть массив вместо объекта, но в настоящее время нет простого способа установить конкретную длину для массива. Кроме того, индексирование массива будет начинаться с 0, а не с 1.

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

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