Blog

🎯 Felicidades: tu plugin de WordPress acaba de convertirse en una funcionalidad "core"

Leonardo Losoviz
Por Leonardo Losoviz ·

Como la WP REST API ya viene incluida en el núcleo de WordPress, a menudo he aconsejado evitar GraphQL y simplemente usar la REST API para alimentar de datos a nuestros plugins de WordPress y bloques de Gutenberg.

Ya no. WordPress 6.5 acaba de ser lanzado, incluyendo una nueva e increíble funcionalidad: Plugin Dependencies.

Con Plugin Dependencies, cualquier plugin de WordPress que esté disponible en el directorio de plugins puede definirse como una dependencia para nuestro plugin, y WordPress instalará esa dependencia justo antes de instalar nuestro plugin.

Como consecuencia, cada plugin del directorio se convierte esencialmente en una funcionalidad "core", ya que se instalará de forma implícita siempre que sea requerido por cualquier otro plugin.

Algunas aplicaciones son tanto obvias como innecesarias, como tener un complemento de WooCommerce declarando una dependencia de WooCommerce, ya que el propietario del sitio web seguramente ya usará WooCommerce.

Pero cuando el plugin requerido proporciona "herramientas" para algún otro plugin, y no podemos esperar que el propietario del sitio web tenga ese plugin instalado de antemano (o incluso conozca su existencia), el resultado puede ser realmente impactante.

Ese es el caso con GraphQL y Gato GraphQL.

GraphQL se convierte en una funcionalidad "core" en WordPress

GraphQL es una interfaz para obtener, modificar y volver a almacenar cualquier dato del sitio WordPress. Cualquier plugin que necesite interactuar con datos (y prácticamente todos lo hacen) puede potencialmente usar GraphQL para satisfacer sus necesidades.

GraphQL es "herramienta". Y Gato GraphQL es el proveedor de herramientas.

Al hacer que tu plugin declare una dependencia de Gato GraphQL, el servidor GraphQL estará inmediatamente disponible para el uso propio de tu plugin.

Por ejemplo, puedes usar GraphQL para obtener datos para los bloques de Gutenberg de tu plugin, y evitar crear (y mantener) controladores REST.

Por primera vez, los desarrolladores de plugins ahora pueden considerar GraphQL como una alternativa real a la WP REST API.

¿Podría la dependencia del plugin convertirse en un problema?

Como el plugin que se instala como dependencia aparecerá en el wp-admin, el propietario del sitio web no avisado podría con razón preguntarse: "¿De dónde salió eso? ¿Me han hackeado? ¿Es esto spam? ¿Qué está pasando aquí?"

Si el propietario del sitio web se molestara, eso sería preocupante, ya que ningún plugin puede permitirse antagonizar a sus usuarios (al menos, hasta que entiendan lo que está pasando y acepten la solución).

Esta situación también podría mejorarse, e incluso evitarse por completo. Por ejemplo, considerando a Gato GraphQL como la dependencia del plugin, Gato GraphQL también podría tener un plugin en versión Lite, que simplemente instale un servidor GraphQL para consumo interno únicamente, sin visibilidad a través de la UI. (¡Otra tarea para mi lista de pendientes! 🤷🏻‍♂️)

Una pregunta más importante para Gato GraphQL (y otros plugins también) es: ¿Sería el nuevo sitio menos seguro?

En particular para Gato GraphQL: ¿Expondrá un endpoint público de GraphQL datos a los que cualquier visitante pueda acceder, y que puedan exponer datos privados involuntariamente?

La respuesta es no. Gato GraphQL por defecto no habilita el endpoint único público, por lo que puede instalarse sin miedo a riesgos de seguridad.

Añadiendo Gato GraphQL como dependencia de plugin

Vamos a ponernos manos a la obra y a jugar con esta increíble nueva funcionalidad.

Para poder usar GraphQL en tu plugin, necesitarás declarar gatographql como dependencia de plugin en la cabecera del plugin:

/**
 * Plugin Name: Blocks for cooking recipes
 * Requires Plugins: gatographql
 */

Entonces tu plugin puede acceder a los datos mediante el endpoint interno blockEditor, disponible bajo la constante de JavaScript GATOGRAPHQL_BLOCK_EDITOR_ADMIN_ENDPOINT en el wp-admin, que apunta a esta URL:

https://mysite.com/wp-admin/edit.php?page=gatographql&action=run_query&endpoint_group=blockEditor

Por ejemplo, el bloque puede obtener datos usando código JavaScript como este:

(async function () {
  const data = {
    query: `
      query GetCookingRecipeBlockData($limit: Int) {
        posts(pagination: { limit: $limit }) {
          id
          title
          author {
            id
            name
          }
        }
      }
    `,
    variables: {
      limit: 3
    },
  };
 
  const response = await fetch(
    GATOGRAPHQL_BLOCK_EDITOR_ADMIN_ENDPOINT,
    {
      method: 'post',
      body: JSON.stringify(data),
      headers: {
        Accept: 'application/json',
        'Content-Type': 'application/json',
        'Content-Length': data.length,
      },
      credentials: 'include',
    }
  );
 
  /**
   * Ejecuta la consulta y espera la respuesta
   */
  const json = await response.json();
 
  /**
   * Comprueba si la consulta produjo errores; si no, usa los resultados
   */
  if (json.errors) {
    console.log(JSON.stringify(json.errors));
  } else {
    console.log(JSON.stringify(json.data));
  }
})();

Si quieres poder usar mutaciones anidadas en tus consultas GraphQL, también puedes crear un endpoint interno que sea exclusivo de tu plugin y configurarlo en consecuencia.


Suscríbete a nuestra newsletter

Mantente al tanto de todas las novedades de Gato GraphQL.