Servidores GraphQL para WordPress

Gato GraphQL vs WPGraphQL

Comparación entre Gato GraphQL y WPGraphQL

Gato GraphQL vs WPGraphQL
plus image
Gato GraphQL vs 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ísticaGato GraphQLWPGraphQL
Problema N+1No es un problema gracias al diseño arquitectónicoPuede ser un problema si no se gestiona; el desarrollador debe estar atento
Seguridad: deshabilitar endpointPuede deshabilitar por completo el endpoint único usando persisted queries (PRO)No disponible
Control de accesoValidació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 personalizadosMúltiples endpoints protegidos por contraseña/personalizables; soporta jerarquía de endpoints (PRO)Endpoint único, personalización limitada
Actualizaciones en bloque y buscar/reemplazarEliminación en bloque, etiquetado, reemplazo (con regex), vía GraphQL (PRO)No disponible
Características GraphQL personalizadas/experimentalesMutaciones anidadas, schema namespacing, oneOf input objectMayormente especificación estándar de GraphQL
Multiple Query Execution (componibilidad)Múltiples consultas en un documento, compartir estado con @exportConsultas en lote (varias por petición), pero no pueden compartir estado
Endpoints internos/privadosEndpoint privado para backend/sólo PHP, no expuesto a los usuarios (PRO)No disponible
Mutación de datos ricaRecuperar, modificar y persistir datos en un único documento (PRO)No soportado
Sincronización y distribución de contenidoImportar/exportar vía GraphQL, RSS, CSV, REST API (PRO)No disponible
Integración con servicios webLlamadas 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 GraphQLUI de administración más básica
Batching/componibilidadComponer campos/directivas, lógica de resolver reutilizable (PRO)No soportado
Multiple Query ExecutionSoportado, con estado compartido y dependenciasSoportado, sin compartir estado
Uso estándar headless/estáticoAmbos son igualmente capacesAmbos 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.

Editor de persisted queries
Editor de persisted queries

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

Editor de la Access Control List
Editor de la Access Control List

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

Editor de la Cache Control List

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

Endpoint personalizado protegido por contraseña
Endpoint personalizado protegido por contraseña

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

Esquema interactivo con namespaces
Esquema interactivo con namespaces

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.

Editor de Reglas de Automatización
Editor de Reglas de Automatización

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.

Suscríbete a nuestra newsletter

Mantente al tanto de todas las novedades de Gato GraphQL.