Запрос полей 'self'
Иногда нам нужно изменить форму ответа, чтобы воспроизвести тот же ответ от другого сервера GraphQL или от REST API.
Мы можем сделать это с помощью поля self, добавленного ко всем типам в схеме GraphQL, которое возвращает тот же объект, к которому оно применяется:
type QueryRoot {
self: QueryRoot!
}
type Post {
self: Post!
}
type User {
self: User!
}Как это работает
Поле self позволяет добавлять дополнительные уровни к запросу, не покидая запрашиваемый объект. Выполнение этого запроса:
{
__typename
self {
__typename
}
post(by: {id: 1}) {
self {
id
__typename
}
}
user(by: {id: 1}) {
self {
id
__typename
}
}
}...даёт следующий ответ:
{
"data": {
"__typename": "QueryRoot",
"self": {
"__typename": "QueryRoot"
},
"post": {
"self": {
"id": 1,
"__typename": "Post"
}
},
"user": {
"self": {
"id": 1,
"__typename": "User"
}
}
}
}Как использовать
Используйте self для искусственного добавления дополнительных уровней, необходимых для ответа, и псевдонимы полей для соответствующего переименования этих уровней.
Например, этот запрос воссоздаёт форму другого сервера GraphQL:
{
categories: self {
edges: postCategories {
node: self {
name
slug
}
}
}
}Этот запрос воссоздаёт форму WP REST API:
{
post(by: {id: 1}) {
content: self {
rendered: content
}
}
}Добавление полей self к эндпоинтам
Добавление полей self к схеме можно настроить следующим образом, в порядке приоритета:
✅ Специфический режим для custom endpoint или persisted query, определённый в конфигурации схемы

✅ Режим по умолчанию, определённый в Настройках
Если конфигурация схемы имеет значение "Default", будет использован режим, определённый в Настройках:

Когда использовать
Поле self можно использовать для адаптации формы ответа GraphQL к какой-либо конкретной требуемой форме, например к форме другого сервера GraphQL или REST API.