Gato GraphQL vs WPGraphQL
Comparación entre Gato GraphQL y WPGraphQL


Si sólo necesitas construir un sitio WordPress headless y desplegarlo como estático, y actualmente utilizas WPGraphQL, cambiar a Gato GraphQL no supondrá ninguna diferencia.
De lo contrario, cambiar a Gato GraphQL ofrece muchas ventajas. Las siguientes son ventajas que proporciona Gato GraphQL + todas las extensiones, que WPGraphQL no ofrece.
Tabla resumen
| Característica | Gato GraphQL | WPGraphQL |
|---|---|---|
| Problema N+1 | No es un problema gracias al diseño arquitectónico | Puede ser un problema si no se gestiona; el desarrollador debe estar atento |
| Seguridad: deshabilitar endpoint | Puede deshabilitar por completo el endpoint único usando persisted queries (PRO) | No disponible |
| Control de acceso | Validación campo a campo, con roles/capabilities/IP, vía UI (PRO) | No a nivel de campo, menos granular |
| Control de caché | max-age calculado automáticamente para las consultas (PRO) | Sin control de caché automático |
| Endpoints personalizados | Múltiples endpoints protegidos por contraseña/personalizables; soporta jerarquía de endpoints (PRO) | Endpoint único, personalización limitada |
| Actualizaciones en bloque y buscar/reemplazar | Eliminación en bloque, etiquetado, reemplazo (con regex), vía GraphQL (PRO) | No disponible |
| Características GraphQL personalizadas/experimentales | Mutaciones anidadas, schema namespacing, oneOf input object | Mayormente especificación estándar de GraphQL |
| Multiple Query Execution (componibilidad) | Múltiples consultas en un documento, compartir estado con @export | Consultas en lote (varias por petición), pero no pueden compartir estado |
| Endpoints internos/privados | Endpoint privado para backend/sólo PHP, no expuesto a los usuarios (PRO) | No disponible |
| Mutación de datos rica | Recuperar, modificar y persistir datos en un único documento (PRO) | No soportado |
| Sincronización y distribución de contenido | Importar/exportar vía GraphQL, RSS, CSV, REST API (PRO) | No disponible |
| Integración con servicios web | Llamadas API salientes/entrantes y webhooks (PRO) | No soportado |
| Automatización (hooks/flujos de trabajo) | GraphQL como automatización de flujos de trabajo (PRO/editor UI) | No disponible |
| Facilidad de uso (integración UI) | Amplias funcionalidades UI para construir/administrar consultas GraphQL | UI de administración más básica |
| Batching/componibilidad | Componer campos/directivas, lógica de resolver reutilizable (PRO) | No soportado |
| Multiple Query Execution | Soportado, con estado compartido y dependencias | Soportado, sin compartir estado |
| Uso estándar headless/estático | Ambos son igualmente capaces | Ambos son igualmente capaces |
Etiquetas:
- (PRO): Indica que la característica requiere la versión/extensiones de pago/pro de Gato GraphQL.
Resumen de puntos clave:
- Gato GraphQL ofrece funcionalidades adicionales importantes para desarrollo avanzado, automatización y seguridad
- Ambos plugins son equivalentes para instalaciones básicas estáticas/headless de WordPress
- Las funcionalidades avanzadas en Gato GraphQL se centran en:
- Control granular
- Automatización de flujos de trabajo
- Integraciones ricas
- Funcionalidades experimentales modernas de GraphQL
Facilidad de desarrollo
Los desarrolladores no necesitan preocuparse por el problema de las consultas "n+1": Debido al diseño arquitectónico del servidor GraphQL, simplemente no ocurre.
Seguridad
Cuando utilizas Persisted queries para exponer datos predefinidos, puedes deshabilitar por completo el endpoint único de GraphQL, de modo que ni siquiera los usuarios autenticados puedan acceder a él.

Control de acceso
Puedes validar que sólo usuarios autenticados, o usuarios con un determinado rol o capability, o visitantes de un determinado rango de IP, puedan acceder a los datos, campo a campo (PRO).

Control de caché
Al cachear la respuesta GraphQL utilizando el Caché HTTP estándar, la cabecera max-age se calcula automáticamente, a partir de todos los campos presentes en la consulta GraphQL (PRO).

Personalización y gestión de endpoints
Puedes proporcionar múltiples endpoints personalizados, cada uno de ellos personalizado para un cliente o aplicación concreta, protegiéndolos mediante contraseña.
Y puedes añadirles categorías personalizadas, y darles una jerarquía (como /graphql/customers/some-customer y /graphql/customers/another-customer).

Actualizaciones en bloque
Puedes ejecutar actualizaciones en bloque. Por ejemplo, puedes borrar todos los comentarios del sitio, o asignar una etiqueta o categoría a todas tus entradas.
Y puedes buscar y reemplazar una cadena en cientos de entradas, por ejemplo para reemplazar el dominio antiguo por el nuevo dominio, e incluso usando una regex (PRO).
Características personalizadas de GraphQL
Tendrás acceso a nuevas características de GraphQL, propuestas para la especificación pero aún no publicadas, incluyendo mutaciones anidadas, Funcionalidades personalizadas para el esquema y el Input object 'oneOf'.

Multiple Query Execution
WPGraphQL permite ejecutar consultas en lote, donde varias consultas GraphQL se resuelven dentro de una única petición HTTP.
Gato GraphQL proporciona Ejecución de múltiples consultas, donde un único documento GraphQL puede ejecutar múltiples operaciones.
Multiple Query Execution es una mejora sobre el batching de consultas, ya que las operaciones pueden compartir estado entre sí mediante la directiva @export.
Por ejemplo, para duplicar una entrada, tenemos una operación query que obtiene los datos de la entrada, y pasa esos datos a una operación mutation que crea una nueva entrada con ellos:
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
}
}Componibilidad
Tendrás la posibilidad de componer campos, donde el valor de un campo puede proporcionarse como entrada de otro campo en la misma consulta, permitiendo que un conjunto fundamental de resolvers de campos cubra un número ilimitado de casos de uso (PRO).
Por ejemplo, en lugar de crear el campo Post.hasExcerpt, podemos aplicar el campo _notEmpty sobre Post.excerpt para producir el mismo valor:
query {
post(by: { id: 1 }) {
excerpt
hasExcerpt: _notEmpty(value: $__excerpt)
}
}De forma similar, puedes componer directivas, de modo que una directiva pueda aplicarse sobre una propiedad interna del valor del campo.
Por ejemplo, la siguiente consulta traduce los nombres de las categorías de la entrada a otro idioma:
query {
post(by: { id: 1 }) {
title
categoryNames
frenchCategoryNames: categoryNames
@underEachArrayItem
@strTranslate(
from: "en",
to: "fr"
)
}
}Disponibilidad del servidor GraphQL
Puedes exponer endpoints privados para alimentar tus bloques de Gutenberg. Y puedes acceder a un servidor GraphQL privado, para obtener datos para tu aplicación mediante código PHP, sin exponer ningún endpoint público (PRO).
Versatilidad al mutar datos
Puedes usar GraphQL para recuperar, modificar y finalmente almacenar de nuevo el contenido en tu sitio, todo ello dentro de un único documento GraphQL (PRO).
Por ejemplo, puedes obtener todos los bloques de Gutenberg en una entrada, extraer sus propiedades, traducir esas cadenas mediante la API de Google Translate, insertar esas cadenas de nuevo en el bloque, y guardar la entrada de nuevo.
Sincronización y distribución de contenido
Puedes usar GraphQL para importar entradas desde otro sitio WordPress, desde un feed RSS, desde un CSV, o desde cualquier API REST o GraphQL (PRO).
Puedes exportar contenido a otro sitio WordPress, y almacenarlo como JSON y CSV (PRO).
Interacción con servicios web
Puedes invocar la API de cualquier servicio externo mediante un cliente HTTP (PRO). Por ejemplo, puedes suscribir a tus usuarios de WordPress a tu lista de correo de Mailchimp.
Y puedes recibir y procesar datos entrantes desde cualquier servicio mediante un webhook dedicado (PRO). Por ejemplo, puedes capturar los correos del newsletter registrados en un sitio sandbox de InstaWP y enviarlos automáticamente a Mailchimp.
Automatización
Puedes usar GraphQL para automatizar tareas y flujos de contenido (PRO).
Por ejemplo, cuando se crea una nueva entrada (evento vía hook draft_post) puedes ejecutar una persisted query que comprueba si la entrada no tiene miniatura y, en ese caso, genera una imagen llamando a la API de Stable Diffusion, la comprime mediante TinyPng, y finalmente inserta la imagen como la imagen destacada de la entrada.

Facilidad de uso
Todos estos casos de uso adicionales pueden conseguirse directamente dentro del wp-admin, proporcionando la consulta GraphQL mediante una interfaz de usuario, sin necesidad de desplegar ningún código PHP.
