Проблема с определением схемы GraphQL для объекта

#graphql #schema

#graphql #схема

Вопрос:

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

 {
    "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
}
`;
  

Но этот запрос завершается ошибкой из-за того, что object prop содержит «1», «2» и т.д. Есть ли лучший способ построить эту схему?

Ответ №1:

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

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

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

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

Комментарии:

1. Спасибо! да, мне пришлось изменить свое поле с «1» на «something1».