Mutaciones en GraphQL, con ejemplos que funcionan

Mutaciones en GraphQL

Mutaciones en GraphQL: sintaxis, variables y tipos input | We.Inc

Escribe mutaciones GraphQL que crean, actualizan y borran datos: sintaxis de la operación, $variables, tipos de objeto input, qué devolver y cómo se ven los errores y el éxito parcial.

Una mutación de GraphQL es la operación que envías para cambiar datos. Empieza con la palabra clave mutation, invoca un campo del tipo Mutation del esquema, pasa argumentos, normalmente un objeto input guardado en una $variable, y selecciona qué campos del resultado devolver. Los campos de mutación de nivel superior se ejecutan uno tras otro, nunca en paralelo.

La sintaxis de una mutación por partes

Usa el generador de abajo para ver una mutación completa para una pequeña lista de tareas: la operación, el JSON de variables que tu código enviaría con ella y una respuesta típica. Escribe el título de una tarea y mira cómo se actualizan las variables, así puedes copiar una petición lista para ejecutar contra un esquema equivalente.

Preguntas frecuentes

¿Qué diferencia hay entre una query y una mutation?

Ambas usan la misma sintaxis y ambas pueden devolver datos. Por convención, las queries solo leen y las mutations escriben. La regla de ejecución también cambia: los campos de una query pueden resolverse en paralelo, mientras que los campos de mutación de nivel superior se ejecutan en serie.

¿Por qué usar un tipo input en lugar de argumentos sueltos?

Un objeto input agrupa valores relacionados en un único argumento tipado, así la firma de la mutación se mantiene corta y puedes añadir campos opcionales más adelante sin cambiar cada llamada.

¿Puedo enviar una mutación con una petición GET?

No. Las pautas de GraphQL over HTTP permiten a los servidores aceptar GET solo para operaciones query. Las mutaciones van por POST, lo que además mantiene las escrituras fuera de las cachés del navegador y de la CDN.

¿Es atómica una mutación con varios campos?

No. graphql.org señala que la ejecución en serie no es una transacción de base de datos. Si el segundo campo falla, el cambio del primero se mantiene, y la respuesta contiene datos para uno y un error para el otro.

¿Qué debería devolver una mutación de borrado?

La especificación lo deja en tus manos, pero el campo sigue necesitando un tipo de salida. Las opciones habituales son el id del objeto borrado, el propio objeto eliminado o un tipo payload con el id y un indicador de éxito.

Anatomía de una mutación

Variables y objetos input

Errores en una escritura

El esquema detrás de los ejemplos

Tipo Mutation y tipos input

Los tipos input usan la palabra clave input. TaskPatch no tiene campos obligatorios, así que una actualización puede enviar solo lo que cambia.

Enviarla desde JavaScript

Envía la mutación por POST con fetch

El documento y las variables viajan como dos claves de un único cuerpo JSON. Revisa errors incluso cuando el estado es 200.

Dos escrituras en una operación

Los alias permiten ejecutar el mismo campo dos veces. El segundo solo se ejecuta cuando termina el primero, pero si falla no deshace el primero.

Crear

El tipo input agrupa los campos de la nueva tarea. El conjunto de selección pide el id que asignó el servidor.

Actualizar

El id indica qué tarea cambiar y el input lleva solo los campos que cambian.

Borrar

En una tarea eliminada no queda nada que seleccionar, así que este esquema devuelve el id borrado como un escalar ID simple.

Generador de mutaciones

Elige una mutación

Título de la tarea

Mutación

Variables (JSON)

Respuesta de ejemplo

Copiar mutación

Copiar variables

Borrar solo necesita el id, así que el título no se envía.

Empieza gratis · Sin tarjeta de crédito

Relacionado: Guías

Producto

Para quién es

Funciones

Recursos

Empresa

Mapa del sitio