Это
{
user {
... on User {
id
username
}
}
}
и
{
user {
...UserFragment
}
}
fragment UserFragment on User {
id
username
}
эквивалентны. В обоих случаях вы используете фрагмент. В первом примере мы просто ссылаемся на фрагмент как встроенный фрагмент .
При запросе поля, которое возвращает составной тип (объект, интерфейс или объединение ), вы должны указать набор выбора или одно или несколько полей для типа возвращаемого значения. Поскольку фрагменты должны включать условие типа (ключевое слово on
плюс имя типа), их можно использовать для указания различных наборов выбора в зависимости от типа, который фактически возвращается во время выполнения.
{
user {
...RegularUserFragment
...AdminFragment
}
}
fragment RegularFragment on RegularUser {
id
username
}
fragment AdminFragment on Admin {
id
username
accessLevel
}
Все, что мы говорим: «если тип во время выполнения такой, то вернуть этот набор полей». Если какое-либо из полей внутри фрагмента также возвращает составной тип, тогда эти поля также должны указывать набор выбора для - это означает, что дополнительные фрагменты могут использоваться внутри этих наборов выбора.