GraphQL поддерживает три типа операций - запросы, мутации и подписки. Отдельная схема должна поддерживать запросы, но два других типа являются необязательными. Для каждой операции, которую поддерживает схема, она определяет один тип, который будет служить root этой операции. Мы называем эти три типа корневыми типами операций . По соглашению мы обычно называем эти типы Query
, Mutation
и Subscription
, но они могут иметь и любые другие имена.
При использовании SDL мы указываем, какие типы связаны с каждой операцией, напримерэто:
schema {
query SomeType
mutation SomeOtherType
}
если вы используете Apollo Server, описанный выше шаг не является необходимым, но его можно сделать, чтобы переопределить значения по умолчанию, которые предоставляет Apollo.
Если вы используете простой GraphQL.js, тогда корневые типы операций определяются как часть вашего объекта схемы:
const schema = new GraphQLSchema({
query: SomeType,
mutation: SomeOtherType,
})
Поскольку Query
или Mutation
является типом объекта, как и любой другой, важно помнить, что поле наQuery
, как getUsers
, все еще просто поле. В разговорной речи мы называем эти поля запросами (а поля корневого типа мутации - мутациями), но они по-прежнему являются просто полями.
Однако, учитывая объект GraphQLResolveInfo, вы можете определить, к какому типу относится полеи вы также можете определить три корневых типа операций. Таким образом, вы можете сделать что-то вроде этого:
const { parentType, schema } = info
const isQueryField = parentType === schema.getQueryType()