Gato GraphQL vs WP REST API
Comparación entre Gato GraphQL y la WP REST API


Las diferencias entre las APIs REST y GraphQL son por lo general válidas al contrastar la WP REST API con Gato GraphQL.
Con GraphQL puedes ejecutar una consulta GraphQL a medida contra un endpoint, indicando qué datos específicos necesitas, y obteniendo únicamente esos datos en una sola petición.
Por ejemplo, la siguiente consulta GraphQL obtendrá los datos requeridos para una entrada concreta, incluyendo los datos de sus relaciones (autor, categorías y etiquetas), todo en una sola petición:
query {
post(by: { id: 1 }) {
title
content
url
date
author {
id
name
}
categories {
id
name
}
tags {
id
name
}
}
}Para obtener los mismos datos con REST, es posible que necesites ejecutar primero una petición para recuperar los datos de la entrada, y luego una petición adicional para cada una de sus relaciones (autor, categorías y etiquetas) para obtener sus datos.
Estas diferencias arquitectónicas entre REST y GraphQL se han tratado ampliamente en otros lugares, así que no las repetiremos aquí.
A continuación, hagamos una comparación más concreta entre Gato GraphQL + todas las extensiones, y la WP REST API.
Tabla resumen
| Característica | Gato GraphQL | WP REST API |
|---|---|---|
| Obtención de datos | Ejecuta consultas GraphQL a medida contra un endpoint, obteniendo datos específicos en una sola petición. | Requiere múltiples peticiones a diferentes endpoints para obtener datos relacionados (p. ej., datos de entradas, autor, categorías y etiquetas). |
| Endpoints | Soporta Persisted queries, que son endpoints con datos predefinidos creados utilizando el lenguaje GraphQL mediante una interfaz dentro del wp-admin, sin necesidad de desplegar código. | Expone los datos mediante endpoints REST, cada uno con su propia URL y datos predefinidos, creados con código PHP y desplegados dentro de un tema o plugin. |
| Control de acceso | Ofrece flexibilidad con control de acceso a nivel de campo basado en reglas (p. ej., roles de usuario, capabilities, rango de IP). | Restringe los datos según el parámetro context (p. ej., view para usuarios no autenticados, edit para usuarios autenticados con los permisos adecuados). |
| Operaciones en lote | Soporta Ejecución de múltiples consultas, donde un único documento GraphQL puede ejecutar múltiples operaciones que pueden compartir estado mediante la directiva @export, mejorando las batch requests. | Permite batch requests, donde múltiples peticiones se resuelven internamente dentro de una sola petición HTTP. |
| Gestión del sitio | Puede obtener datos, modificarlos y almacenarlos de vuelta dentro de un único documento GraphQL mediante interfaces de usuario, permitiendo la automatización y gestión de sitios WordPress. Puede realizar tareas de múltiples plugins como duplicar, automatizar, hacer copias de seguridad, buscar/reemplazar, webhooks y traducir. Es una API y mucho más. | Principalmente una API para acceder y manipular datos de WordPress. |
| Generalidad | Una herramienta genérica para gestionar sitios WordPress, capaz de mutar datos e integrarse con servicios de terceros mediante consultas GraphQL. | Centrada en proporcionar una API; requiere plugins adicionales o código personalizado para lograr funcionalidades similares. |
Resumen de puntos clave:
- Obtención de datos: Gato GraphQL utiliza consultas a medida, mientras que la WP REST API utiliza múltiples peticiones a endpoints.
- Endpoints: Gato GraphQL utiliza persisted queries creadas mediante una UI, mientras que la WP REST API utiliza endpoints REST programados en PHP.
- Control de acceso: Gato GraphQL ofrece control a nivel de campo, mientras que la WP REST API utiliza el parámetro context.
- Operaciones en lote: Gato GraphQL utiliza Multiple Query Execution, y la WP REST API utiliza batch requests.
- Gestión del sitio: Gato GraphQL es una herramienta integral, y la WP REST API es principalmente una API.
Acceso a datos predefinidos
Con la WP REST API, expones los datos mediante endpoints REST. Cada endpoint tiene su propia URL, y sus datos están predefinidos (para los recursos correspondientes, como entradas o usuarios).
De forma similar a los endpoints REST, Gato GraphQL soporta Persisted queries, que también son endpoints con datos predefinidos. Solicitar una persisted query mediante GET ejecutará la consulta GraphQL almacenada, y producirá la respuesta JSON esperada:

La diferencia entre ellos es que mientras los endpoints de la REST API se crean mediante código PHP, y deben desplegarse dentro de un tema o plugin, las persisted queries de Gato GraphQL se crean utilizando el lenguaje GraphQL, y se publican mediante una interfaz de usuario (basada en el editor de WordPress) dentro del wp-admin, sin necesidad de desplegar ningún código.

Los mismos mecanismos de caché pueden aplicarse tanto a los endpoints REST como a las persisted queries de GraphQL. Como la persisted query se accede bajo su propio endpoint, su respuesta puede cachearse utilizando el Caché HTTP estándar (PRO).
Control de acceso
Restringir los datos en la WP REST API depende del parámetro context. Pasar ?context=view produce datos para usuarios no autenticados, y ?context=edit incluye datos adicionales para usuarios autenticados (con los permisos adecuados), como el campo content.raw de la entrada.
Gato GraphQL proporciona mucha más flexibilidad, ya que cada campo puede ser accesible o no según las reglas de 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 un campo concreto (PRO).

Operaciones en lote
La WP REST API permite ejecutar batch requests, donde múltiples peticiones se resuelven internamente dentro de una sola 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 las batch requests, 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
}
}Gestión del sitio WordPress
Gato GraphQL nos permite obtener datos de la base de datos, modificarlos según se requiera, y almacenarlos de vuelta, todo ello dentro de un único documento GraphQL.
Esto se consigue mediante interfaces de usuario, para componer y publicar las consultas GraphQL, configurar los endpoints según sea necesario, y automatizar la ejecución de una consulta cuando ocurra algún evento.
Todo esto significa que Gato GraphQL es una herramienta genérica para gestionar nuestros sitios WordPress, satisfaciendo aquellos casos de uso donde los datos (ya sean del sitio WordPress, o proporcionados por servicios de terceros) deben ser mutados, ya que esto puede lograrse ejecutando alguna consulta GraphQL.
Fíjate en cómo Gato GraphQL puede ofrecer la funcionalidad de múltiples plugins:
- No es un plugin de duplicación, sin embargo puedes duplicar entradas con él.
- No es un plugin de automatización, pero puedes automatizar tus tareas, sin ninguna restricción.
- No es un plugin de copia de seguridad, pero puedes importar y exportar entradas.
- No es un plugin de buscar y reemplazar, pero puedes modificar tus entradas en bloque.
- No es un plugin de webhooks ni un cliente HTTP, pero puedes tanto enviar una petición a cualquier API, como recibir y procesar peticiones entrantes desde cualquier servicio.
- No es un plugin de traducción, pero puedes traducir cualquier contenido.
La WP REST API es simplemente eso, una API.
Gato GraphQL también es una API, pero además mucho más.
