#javascript #jestjs #graphql #shopify #apollo
#graphql
Вопрос:
Я получаю объект GraphQL с полем «дочерние элементы». Это поле имеет тип ‘X’ и имеет две разные реализации, ‘Y’ и ‘Z’.
Поэтому, когда я выполняю свой запрос, я могу сделать это :
{
fieldOne
fieldTwo
children {
... on Y {
fieldOne
fieldTwo
}
... on Z {
fieldOne
}
}
}
Есть ли способ для меня получить дочерние элементы только с реализацией Y ?
Потому что, если я делаю это :
{
fieldOne
fieldTwo
children {
... on Y {
fieldOne
fieldTwo
}
}
}
Я получу и объект, который выглядит следующим образом :
{
fieldOne
fieldTwo
children [
{}, // Z implementation
{}, // Z implementation
{
fieldOne,
fieldTwo
}, // Y implementation
]
}
Спасибо 🙂
Ответ №1:
То, что вы видите, является ожидаемым поведением. Из спецификации:
Фрагменты могут быть определены встроенно в наборе выбора. Это делается для условного включения полей на основе их типа среды выполнения.
Условия типа, подобные ... on Y
, — это просто способ отфильтровать, какие поля разрешаются на основе типа среды выполнения. Они не являются способом фильтрации фактического списка результатов. На самом деле, в GraphQL нет встроенной фильтрации.
Для фильтрации списка, включающего только определенные типы (или на основе любого другого условия), рассматриваемое поле должно иметь какой-то аргумент фильтра и логику преобразователя, которая использует его для фактического выполнения фильтрации.
Если вы используете сторонний API и схема не поддерживает фильтрацию, то как клиент вы мало что можете сделать, кроме обработки ответа после факта.