#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».