Servidores GraphQL para WordPress

Gato GraphQL vs WPGraphQL

Comparação entre Gato GraphQL e WPGraphQL

Gato GraphQL vs WPGraphQL
plus image
Gato GraphQL vs 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

FuncionalidadeGato GraphQLWPGraphQL
Problema N+1Não é um problema devido ao design arquiteturalPode ser um problema se não tratado; o desenvolvedor precisa estar ciente
Segurança: desativação do endpointPode desativar completamente o endpoint único com queries persistidas (PRO)Não disponível
Controle de acessoValidação campo a campo, com funções/capacidades/IP, via UI (PRO)Não em nível de campo, menos granular
Controle de cachemax-age calculado automaticamente para queries (PRO)Sem controle automático de cache
Endpoints personalizadosMúltiplos endpoints, protegidos por senha/personalizáveis; hierarquia de endpoints suportada (PRO)Endpoint único, personalização limitada
Atualizações em massa e busca/substituiçãoExclusão em massa, marcação, substituição (com regex), via GraphQL (PRO)Não disponível
Funcionalidades GraphQL personalizadas/experimentaisMutations aninhadas, schema namespacing, oneOf input objectPrincipalmente a especificação GraphQL padrão
Multiple Query Execution (componibilidade)Múltiplas queries em um documento, compartilhamento de estado com @exportQueries em batch (múltiplas por requisição), mas não podem compartilhar estado
Endpoints internos/privadosEndpoint privado somente para backend/PHP, não exposto aos usuários (PRO)Não disponível
Mutação avançada de dadosRecuperar, modificar e persistir dados em um único documento (PRO)Não suportado
Sincronização e distribuição de conteúdoImport/export via GraphQL, RSS, CSV, REST API (PRO)Não disponível
Integração com serviços webChamadas 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 GraphQLUI de administração mais básica
Batching/componibilidadeComposição de campos/directives, lógica de resolver reutilizável (PRO)Não suportado
Multiple Query ExecutionSuportada, com estado compartilhado e dependênciasSuportada, sem compartilhamento de estado
Uso headless/estático padrãoAmbos são igualmente capazesAmbos 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.

Editor de persisted query
Editor de persisted query

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).

Editor da lista de controle de acesso
Editor da lista de controle de acesso

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).

Editor da lista de controle de cache

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).

Endpoint personalizado protegido por senha
Endpoint personalizado protegido por senha

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.

Schema interativo com namespace
Schema interativo com namespace

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.

Editor de regras de automação
Editor de regras de automação

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.

Assine nossa newsletter

Fique por dentro de todas as atualizações do Gato GraphQL.