Crear una API
Crear una APIAñadiendo caché HTTP

Añadiendo caché HTTP

Cuando las consultas se ejecutan contra el servidor GraphQL usando GET (en lugar del método más tradicional POST), la respuesta GraphQL puede cachearse en el cliente o en etapas intermedias entre el cliente y el servidor (como una CDN), apoyándose en el caché HTTP estándar.

Esto funciona de forma natural para las consultas persistidas, y para el endpoint único y los endpoints personalizados puede funcionar añadiendo el parámetro ?query={ GraphQL query } al endpoint.

La configuración se crea mediante una lista de control de caché, y se entrega al endpoint a través de la configuración del esquema.

Ejecutando el endpoint vía GET

Las consultas persistidas ya son adecuadas para ejecutarse vía GET, ya que almacenan la consulta GraphQL en el servidor (es decir, no debe proporcionarse en el cuerpo de la petición).

Para el endpoint único y los endpoints personalizados, sin embargo, la consulta debe proporcionarse bajo el parámetro ?query=... añadido a la URL del endpoint.

Por ejemplo, la siguiente consulta GraphQL:

{
  posts {
    id
    title
    url
    author {
      id
      name
      url
    }
  }
}

...puede ejecutarse vía GET contra el endpoint único de este modo:

https://mysite.com/graphql/?query={ posts { id title url author { id name url } } }

Cálculo automático de max age

El valor max-age de la respuesta se calcula automáticamente a partir de las listas de control de acceso asignadas al endpoint (vía la configuración del esquema).

Este valor es el menor valor max-age de todos los campos y directivas en la consulta solicitada, o no-store si:

  • se ejecuta cualquier mutación
  • cualquier campo o directiva tiene max-age con valor 0
  • una regla de control de acceso debe comprobar el estado del usuario para cualquier campo o directiva (en cuyo caso, la respuesta es específica del usuario, por lo que no puede cachearse)

Max-age por defecto

Los campos que no tengan ningún max-age específico usarán el valor por defecto, definido en la Configuración del Esquema:

Valor max-age por defecto en la Configuración del Esquema

Si no se establece, se usará el valor max-age por defecto definido en la página de Ajustes, en la pestaña "Cache Control". Este valor, que es 86400 segundos, puede modificarse en los Ajustes.

Ejemplo

Supongamos que tenemos la siguiente configuración de valores max-age para campos del tipo User:

  • name => 600
  • url => 30

Entonces, la respuesta a esta consulta tendrá el valor max-age establecido en 86400 (porque ni displayName ni email han sido configurados, por lo que usan el valor por defecto):

query {
  users {
    displayName
    email
  }
}

La respuesta a esta consulta tendrá el valor max-age establecido en 30 (correspondiente a url, que es el valor más bajo de todos los campos configurados):

query {
  user(by: {id: 1}) {
    name
    url
  }
}

La respuesta a esta consulta tendrá el valor max-age establecido en no-store (porque el campo me requiere el estado del usuario):

query {
  me {
    name
    url
  }
}

La respuesta a esta consulta tendrá el valor max-age establecido en no-store (porque ejecuta una mutación):

mutation {
  createPost {
    id
  }
}

Accediendo a todas las listas de control de caché

Al hacer clic en "Cache Control Lists" en el menú del plugin, se muestra la lista de todas las listas de control de caché creadas:

Listas de control de caché en el admin
Listas de control de caché en el admin

Creando una nueva lista de control de caché

Haz clic en el botón "Add New Cache Control List" para abrir el editor de WordPress:

Creando una lista de control de caché

Asigna un título a la lista de control de caché, añade entradas con campos y directivas, y configura el valor max-age para ellos:

Creando una lista de control de caché

Cuando esté lista, haz clic en el botón Publicar. A continuación, la nueva lista de control de caché queda disponible para la configuración del esquema.

Entradas de Cache Control

Cada lista de control de caché contiene una o varias entradas, cada una de ellas con los siguientes elementos:

  • Los campos para los que configurar el caché
  • Las directivas para las que configurar el caché
  • El valor max-age para ellos

Entrada de control de acceso

Seleccionando campos desde interfaces

Además de campos desde tipos, también podemos seleccionar campos desde interfaces. En este caso, el valor max-age se aplica al consultar dichos campos desde cualquier tipo que implemente la interfaz.

Seleccionando un campo desde una interfaz
Seleccionando un campo desde una interfaz

Describiendo la lista de control de caché

Usa el campo "Extracto", del panel de ajustes del documento, para dar una descripción a la lista de control de caché.

Encuentra más información en la guía Añadiendo una descripción a la API.

Usando la lista de control de caché

Tras crear la lista de control de caché, podemos hacer que el endpoint personalizado o la consulta persistida la usen editando la correspondiente Configuración del Esquema, y seleccionando la ACL de la lista bajo el bloque "Cache Control Lists".

Seleccionando una lista de control de caché en la Configuración del Esquema

Si no se personaliza la configuración, se usarán las listas de control de caché por defecto definidas en la página de Ajustes, en la pestaña "Cache Control":

Seleccionando las listas de control de caché por defecto en la página de Ajustes