Consultando campos 'self'
Às vezes precisamos modificar o formato da resposta, para emular a mesma resposta de outro servidor GraphQL, ou da API REST.
Podemos fazer isso por meio do campo self, adicionado a todos os tipos no schema GraphQL, que retorna o mesmo objeto onde é aplicado:
type QueryRoot {
self: QueryRoot!
}
type Post {
self: Post!
}
type User {
self: User!
}Como funciona
O campo self permite adicionar níveis extras à query sem sair do objeto consultado. Executando esta query:
{
__typename
self {
__typename
}
post(by: {id: 1}) {
self {
id
__typename
}
}
user(by: {id: 1}) {
self {
id
__typename
}
}
}...produz esta resposta:
{
"data": {
"__typename": "QueryRoot",
"self": {
"__typename": "QueryRoot"
},
"post": {
"self": {
"id": 1,
"__typename": "Post"
}
},
"user": {
"self": {
"id": 1,
"__typename": "User"
}
}
}
}Como usar
Use self para adicionar artificialmente os níveis extras necessários à resposta, e aliases de campo para renomear esses níveis de forma adequada.
Por exemplo, esta query recria o formato de outro servidor GraphQL:
{
categories: self {
edges: postCategories {
node: self {
name
slug
}
}
}
}Esta query recria o formato da WP REST API:
{
post(by: {id: 1}) {
content: self {
rendered: content
}
}
}Adicionando campos self aos endpoints
A adição de campos self ao schema pode ser configurada da seguinte forma, em ordem de prioridade:
Modo específico para o custom endpoint ou persisted query, definido na configuração do schema

Modo padrão, definido nas Configurações
Se a configuração do schema tiver o valor "Default", será utilizado o modo definido nas Configurações:

Quando usar
O campo self pode ser usado para adaptar o formato da resposta GraphQL a um formato específico exigido, como o de outro servidor GraphQL, ou da API REST.