Gato GraphQL vs WP REST API
Comparação entre Gato GraphQL e a WP REST API


As diferenças entre as APIs REST e GraphQL são geralmente válidas ao comparar a WP REST API com o Gato GraphQL.
Com GraphQL você pode executar uma query GraphQL personalizada contra um endpoint, indicando quais dados específicos você precisa e buscando apenas esses dados em uma única requisição.
Por exemplo, a seguinte query GraphQL buscará os dados necessários para um post específico, incluindo dados de seus relacionamentos (autor, categorias e tags), tudo em uma única requisição:
query {
post(by: { id: 1 }) {
title
content
url
date
author {
id
name
}
categories {
id
name
}
tags {
id
name
}
}
}Para buscar os mesmos dados com REST, pode ser necessário primeiro executar uma requisição para recuperar os dados do post e, em seguida, uma requisição para cada um de seus relacionamentos (autor, categorias e tags) para buscar seus dados.
Essas diferenças arquiteturais entre REST e GraphQL foram amplamente abordadas em outros lugares, portanto, a partir de agora não as repetiremos aqui.
A seguir, faremos uma comparação mais específica entre o Gato GraphQL + todas as extensões e a WP REST API.
Tabela resumo
| Funcionalidade | Gato GraphQL | WP REST API |
|---|---|---|
| Busca de dados | Executa queries GraphQL personalizadas contra um endpoint, buscando dados específicos em uma única requisição. | Requer múltiplas requisições para diferentes endpoints para buscar dados relacionados (ex.: dados do post, dados do autor, categorias e tags). |
| Endpoints | Suporta Queries Persistidas, que são endpoints com dados predefinidos criados usando a linguagem GraphQL por meio de uma interface de usuário dentro do wp-admin, sem necessidade de implantar código. | Expõe dados via endpoints REST, cada um com sua própria URL e dados predefinidos, criados via código PHP e implantados dentro de um tema ou plugin. |
| Controle de acesso | Oferece flexibilidade com controle de acesso no nível de campo baseado em regras (ex.: funções de usuário, capacidades, faixa de IP). | Restringe dados com base no parâmetro context (ex.: view para usuários não autenticados, edit para usuários autenticados com permissões). |
| Operações em lote | Suporta a Multiple Query Execution, onde um único documento GraphQL pode executar múltiplas operações que podem compartilhar estado via a diretiva @export, melhorando as batch requests. | Permite batch requests, onde múltiplas requisições são atendidas internamente dentro de uma única requisição HTTP. |
| Gerenciamento do site | Pode buscar dados, modificá-los e armazená-los novamente dentro de um único documento GraphQL via interfaces de usuário, possibilitando automação e gerenciamento de sites WordPress. Pode executar tarefas de múltiplos plugins, como duplicar, automatizar, fazer backup, buscar/substituir, webhooks e traduzir. É uma API e muito mais. | Principalmente uma API para acessar e manipular dados do WordPress. |
| Generalidade | Uma ferramenta genérica para gerenciar sites WordPress, capaz de mutação de dados e integração com serviços de terceiros via queries GraphQL. | Focado em fornecer uma API; requer plugins adicionais ou código personalizado para alcançar funcionalidades semelhantes. |
Resumo dos pontos principais:
- Busca de dados: Gato GraphQL usa queries personalizadas, enquanto a WP REST API usa múltiplas requisições para endpoints.
- Endpoints: Gato GraphQL usa queries persistidas criadas via UI, enquanto a WP REST API usa endpoints REST codificados em PHP.
- Controle de acesso: Gato GraphQL oferece controle no nível de campo, enquanto a WP REST API usa o parâmetro context.
- Operações em lote: Gato GraphQL usa a Multiple Query Execution, e a WP REST API usa batch requests.
- Gerenciamento do site: Gato GraphQL é uma ferramenta abrangente, e a WP REST API é principalmente uma API.
Acesso a dados predefinidos
Com a WP REST API, você expõe dados via endpoints REST. Cada endpoint tem sua própria URL e seus dados são predefinidos (para os recursos correspondentes, como posts ou usuários).
De forma semelhante aos endpoints REST, o Gato GraphQL suporta Queries Persistidas, que também são endpoints com dados predefinidos. Requisitar uma query persistida via GET executará a query GraphQL armazenada e produzirá a resposta JSON esperada:

A diferença entre eles é que, enquanto os endpoints da REST API são criados via código PHP e devem ser implantados dentro de um tema ou plugin, as queries persistidas do Gato GraphQL são criadas usando a linguagem GraphQL e são publicadas via uma interface de usuário (baseada no editor do WordPress) dentro do wp-admin, sem necessidade de implantar nenhum código.

Os mesmos mecanismos de cache podem ser aplicados a endpoints REST e queries persistidas GraphQL. Como a query persistida é acessada sob seu próprio endpoint, sua resposta pode ser armazenada em cache usando o cache HTTP padrão (PRO).
Controle de acesso
A restrição de dados na WP REST API depende do parâmetro context. Passar ?context=view produz dados para usuários não autenticados, e ?context=edit inclui dados adicionais para usuários autenticados (com as permissões corretas), como o campo content.raw do post.
O Gato GraphQL oferece muito mais flexibilidade, com cada campo individual sendo acessível ou não com base nas regras de Controle de Acesso. Você pode validar que apenas usuários conectados, ou usuários com determinada função ou capacidade, ou visitantes de determinada faixa de IP, possam acessar um campo específico (PRO).

Operações em lote
A WP REST API permite executar batch requests, onde múltiplas requisições são atendidas internamente dentro de uma única requisição HTTP.
O Gato GraphQL fornece a Multiple Query Execution, onde um único documento GraphQL pode executar múltiplas operações.
A Multiple Query Execution é uma melhoria em relação às batch requests, pois as operações podem compartilhar estado entre si via a diretiva @export.
Por exemplo, para duplicar um post, temos uma operação query que busca os dados do post e passa esses dados para uma operação mutation que cria um novo post com eles:
query GetPostAndExportData($postId: ID!)
{
post(by: { id: $postId }, status: any) {
author {
id @export(as: "authorID")
}
categories {
id @export(as: "categoryIDs", type: LIST)
}
rawContent @export(as: "rawContent")
rawExcerpt @export(as: "excerpt")
featuredImage {
id @export(as: "featuredImageID")
}
tags {
id @export(as: "tagIDs", type: LIST)
}
rawTitle @export(as: "title")
}
}
mutation DuplicatePost
@depends(on: "GetPostAndExportData")
{
createPost(input: {
status: draft,
authorBy: {
id: $authorID
},
categoriesBy: {
ids: $categoryIDs
},
contentAs: {
html: $rawContent
},
excerpt: $excerpt
featuredImageBy: {
id: $featuredImageID
},
tagsBy: {
ids: $tagIDs
},
title: $title
}) {
postID
}
}Gerenciando o site WordPress
O Gato GraphQL nos permite buscar dados do banco de dados, modificá-los conforme necessário e armazená-los novamente, tudo dentro de um único documento GraphQL.
Isso é alcançado via interfaces de usuário, para compor e publicar as queries GraphQL, configurar os endpoints conforme necessário e automatizar a execução de uma query quando algum evento ocorre.
Tudo isso significa que o Gato GraphQL é uma ferramenta genérica para gerenciar nossos sites WordPress, atendendo aos casos de uso em que os dados (sejam do site WordPress ou fornecidos por serviços de terceiros) precisam ser mutados, pois isso pode ser realizado executando alguma query GraphQL.
Note como o Gato GraphQL pode oferecer a funcionalidade de múltiplos plugins:
- Não é um plugin de duplicação, porém você pode duplicar posts com ele.
- Não é um plugin de automação, mas você pode automatizar suas tarefas, sem nenhuma restrição.
- Não é um plugin de backup, mas você pode importar e exportar posts.
- Não é um plugin de busca e substituição, mas você pode modificar seus posts em lote.
- Não é um plugin de webhook nem cliente HTTP, mas você pode tanto enviar uma requisição para qualquer API quanto receber e processar requisições recebidas de qualquer serviço.
- Não é um plugin de tradução, mas você pode traduzir qualquer conteúdo.
A WP REST API é exatamente isso, uma API.
O Gato GraphQL também é uma API, mas muito mais do que isso.
