Настройка схемы
Настройка схемыЗапрос полей 'self'

Запрос полей '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, определённый в конфигурации схемы

Добавление полей self к схеме, настроенное в Schema configuration

✅ Режим по умолчанию, определённый в Настройках

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

Настройка полей self для конфигурации схемы, в Настройках
Настройка полей self для конфигурации схемы, в Настройках

Когда использовать

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