Gato GraphQL vs WPGraphQL
Comparação entre Gato GraphQL e WPGraphQL


Se você apenas precisa criar um site WordPress headless e implantá-lo como estático, e atualmente usa WPGraphQL, migrar para o Gato GraphQL não fará diferença alguma.
Caso contrário, migrar para o Gato GraphQL oferece muitas vantagens. A seguir estão os benefícios fornecidos pelo Gato GraphQL + todas as extensões, que o WPGraphQL não oferece.
Tabela resumida
| Funcionalidade | Gato GraphQL | WPGraphQL |
|---|---|---|
| Problema N+1 | Não é um problema devido ao design arquitetural | Pode ser um problema se não tratado; o desenvolvedor precisa estar ciente |
| Segurança: desativação do endpoint | Pode desativar completamente o endpoint único com queries persistidas (PRO) | Não disponível |
| Controle de acesso | Validação campo a campo, com funções/capacidades/IP, via UI (PRO) | Não em nível de campo, menos granular |
| Controle de cache | max-age calculado automaticamente para queries (PRO) | Sem controle automático de cache |
| Endpoints personalizados | Múltiplos endpoints, protegidos por senha/personalizáveis; hierarquia de endpoints suportada (PRO) | Endpoint único, personalização limitada |
| Atualizações em massa e busca/substituição | Exclusão em massa, marcação, substituição (com regex), via GraphQL (PRO) | Não disponível |
| Funcionalidades GraphQL personalizadas/experimentais | Mutations aninhadas, schema namespacing, oneOf input object | Principalmente a especificação GraphQL padrão |
| Multiple Query Execution (componibilidade) | Múltiplas queries em um documento, compartilhamento de estado com @export | Queries em batch (múltiplas por requisição), mas não podem compartilhar estado |
| Endpoints internos/privados | Endpoint privado somente para backend/PHP, não exposto aos usuários (PRO) | Não disponível |
| Mutação avançada de dados | Recuperar, modificar e persistir dados em um único documento (PRO) | Não suportado |
| Sincronização e distribuição de conteúdo | Import/export via GraphQL, RSS, CSV, REST API (PRO) | Não disponível |
| Integração com serviços web | Chamadas de API de saída/entrada e webhooks (PRO) | Não suportado |
| Automação (hooks/fluxos de trabalho) | GraphQL como automação de fluxos de trabalho (PRO/editor UI) | Não disponível |
| Facilidade de uso (integração UI) | Amplas funcionalidades de UI para criar/administrar queries GraphQL | UI de administração mais básica |
| Batching/componibilidade | Composição de campos/directives, lógica de resolver reutilizável (PRO) | Não suportado |
| Multiple Query Execution | Suportada, com estado compartilhado e dependências | Suportada, sem compartilhamento de estado |
| Uso headless/estático padrão | Ambos são igualmente capazes | Ambos são igualmente capazes |
Legenda:
- (PRO): Indica que a funcionalidade requer a versão paga/pro ou extensões do Gato GraphQL.
Resumo dos pontos principais:
- O Gato GraphQL oferece funcionalidades adicionais significativas para desenvolvimento avançado, automação e segurança
- Ambos os plugins são equivalentes para instalações WordPress estáticas/headless básicas
- As funcionalidades avançadas do Gato GraphQL se concentram em:
- Controle granular
- Automação de fluxos de trabalho
- Integrações avançadas
- Funcionalidades GraphQL experimentais modernas
Facilidade de desenvolvimento
Os desenvolvedores não precisam se preocupar com o problema das queries "n+1": devido ao design arquitetural do servidor GraphQL, isso simplesmente não acontece.
Segurança
Ao usar queries persistidas para expor dados predefinidos, você pode desativar completamente o endpoint único GraphQL, de modo que não seja acessível nem mesmo a usuários autenticados.

Controle de acesso
Você pode validar que apenas usuários logados, ou usuários com determinada função ou capacidade, ou visitantes de um determinado intervalo de IP, possam acessar os dados, campo a campo (PRO).

Controle de cache
Ao armazenar em cache a resposta GraphQL usando o cache HTTP padrão, o header max-age é calculado automaticamente a partir de todos os campos presentes na query GraphQL (PRO).

Personalização e gerenciamento de endpoints
Você pode fornecer múltiplos endpoints personalizados, cada um personalizado para um cliente ou aplicação específica, protegendo-os com uma senha.
E você pode adicionar categorias personalizadas a eles, e definir uma hierarquia (como /graphql/customers/some-customer e /graphql/customers/another-customer).

Atualizações em massa
Você pode executar atualizações em massa. Por exemplo, pode excluir todos os comentários do site, ou atribuir uma tag ou categoria a todos os seus posts.
E você pode buscar e substituir uma string em centenas de posts, por exemplo para substituir o domínio antigo pelo novo, e até mesmo usando uma regex (PRO).
Funcionalidades GraphQL personalizadas
Você terá acesso a novas funcionalidades GraphQL, propostas para a especificação mas ainda não lançadas, incluindo mutations aninhadas, schema namespacing e o 'oneOf' Input Object.

Multiple Query Execution
O WPGraphQL permite executar queries em batch, onde múltiplas queries GraphQL são resolvidas em 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 ao batching de queries, pois as operações podem compartilhar estado entre si via a directive @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
}
}Componibilidade
Você terá a capacidade de compor campos, onde o valor de um campo pode ser fornecido como entrada para outro campo na mesma query, permitindo que um conjunto fundamental de resolvers de campos cubra um número ilimitado de casos de uso (PRO).
Por exemplo, em vez de criar o campo Post.hasExcerpt, podemos aplicar o campo _notEmpty em Post.excerpt para produzir o mesmo valor:
query {
post(by: { id: 1 }) {
excerpt
hasExcerpt: _notEmpty(value: $__excerpt)
}
}Da mesma forma, você pode compor directives, de modo que uma directive possa ser aplicada em uma propriedade interna do valor do campo.
Por exemplo, a seguinte query traduz os nomes das categorias do post para outro idioma:
query {
post(by: { id: 1 }) {
title
categoryNames
frenchCategoryNames: categoryNames
@underEachArrayItem
@strTranslate(
from: "en",
to: "fr"
)
}
}Disponibilidade do servidor GraphQL
Você pode expor endpoints privados para alimentar seus blocos Gutenberg. E pode acessar um servidor GraphQL privado, para buscar dados para sua aplicação usando código PHP, sem expor nenhum endpoint público (PRO).
Versatilidade na mutação de dados
Você pode usar GraphQL para recuperar, modificar e finalmente armazenar novamente o conteúdo do seu site, tudo dentro de um único documento GraphQL (PRO).
Por exemplo, você pode buscar todos os blocos Gutenberg em um post, extrair suas propriedades, traduzir essas strings via API do Google Translate, reinserir essas strings no bloco, e armazenar o post novamente.
Sincronização e distribuição de conteúdo
Você pode usar GraphQL para importar posts de outro site WordPress, de um feed RSS, de um CSV, ou de qualquer API REST ou GraphQL (PRO).
Você pode exportar conteúdo para outro site WordPress, e armazená-lo como JSON e CSV (PRO).
Interação com serviços web
Você pode invocar a API de qualquer serviço externo via um cliente HTTP (PRO). Por exemplo, você pode inscrever seus usuários WordPress na sua lista de email do Mailchimp.
E você pode receber e processar dados de entrada de qualquer serviço via um webhook dedicado (PRO). Por exemplo, você pode capturar os emails de newsletter registrados em um site sandbox InstaWP e enviá-los automaticamente para o Mailchimp.
Automação
Você pode usar GraphQL para automatizar tarefas e fluxos de trabalho de conteúdo (PRO).
Por exemplo, quando um novo post é criado (evento via hook draft_post), você pode executar uma persisted query que verifica se o post não tem uma miniatura e, nesse caso, gera uma imagem chamando a API do Stable Diffusion, comprime via TinyPng, e finalmente insere a imagem como imagem destacada do post.

Facilidade de uso
Todos esses casos de uso adicionais podem ser realizados diretamente no wp-admin, fornecendo a query GraphQL via uma interface de usuário, sem precisar implantar nenhum código PHP.
