Manejo de Cambios Significativos en GraphQL

Rate this content
Bookmark
Slides

Los requisitos cambian, pero los contratos de API son para siempre - ¡Ojalá! Un cambio significativo es algo que no es compatible con versiones anteriores. Esto significa que un consumidor de tu API no podría usar la nueva versión sin hacer un cambio de código ellos mismos. Evitamos cambios significativos si es posible, pero hay casos en los que son inevitables. Podría ser algo pequeño: como hacer un campo obligatorio opcional. O podría ser algo grande: como eliminar una consulta o una mutación. En esta charla revisaremos los tipos de cambios significativos que puedes encontrar y cómo lidiar con ellos de manera elegante.

FAQ

Un cambio destructivo en un esquema GraphQL es una actualización que modifica el contrato de la API de una manera que no es compatible con versiones anteriores, haciendo que las consultas que funcionaban antes del cambio ahora fallen.

Para manejar un cambio destructivo en GraphQL manteniendo la compatibilidad, se puede marcar el campo afectado como obsoleto (usando la directiva 'deprecated') en lugar de eliminarlo, permitiendo que las consultas antiguas sigan funcionando mientras se introduce el nuevo esquema.

La directiva 'deprecated' en GraphQL se utiliza para marcar un campo en el esquema como obsoleto, indicando a los consumidores que el campo no debería ser utilizado. Es parte de la especificación GraphQL, lo que ayuda a los desarrolladores a gestionar cambios sin romper las aplicaciones existentes.

Los pasos para introducir un cambio de forma segura en una API GraphQL son: agregar los nuevos campos, deprecar los campos que se quieren eliminar, migrar todas las aplicaciones clientes para que usen los nuevos campos, y finalmente eliminar los campos obsoletos una vez que no se utilizan.

Es más complicado porque las aplicaciones móviles no siempre se actualizan inmediatamente a la última versión disponible debido a la aprobación de las tiendas de aplicaciones y a que los usuarios deben actualizar la app manualmente, lo que puede resultar en que distintas versiones de la app estén activas simultáneamente.

GraphQL Inspector es una herramienta que ayuda a gestionar cambios en el esquema de GraphQL. Permite realizar comprobaciones automáticas durante las solicitudes de extracción para asegurarse de que no se introduzcan cambios destructivos inadvertidamente. Facilita la revisión al destacar cambios en el esquema antes de que sean implementados.

Kadi Kraman
Kadi Kraman
22 min
08 Dec, 2022

Comments

Sign in or register to post your comment.

Video Summary and Transcription

Esta charla discute el manejo de cambios significativos en un esquema de GraphQL, incluyendo el uso de la directiva obsoleta para etiquetar campos que ya no deberían usarse. También cubre el proceso de despliegue de APIs de GraphQL y aplicaciones móviles, destacando los desafíos de la adopción de lanzamiento de aplicaciones móviles. La charla enfatiza la importancia de hacer actualizaciones seguras en aplicaciones móviles y proporciona estrategias para detectar y manejar cambios significativos, como el uso de TypeScript y GraphQL Inspector. En general, la charla enfatiza la necesidad de minimizar el impacto en el usuario al introducir cambios significativos en los esquemas de GraphQL.

1. Introducción a los Cambios Destructivos en el Esquema GraphQL

Short description:

Hola a todos, en esta parte, hablaré sobre cómo manejar los cambios destructivos en un esquema GraphQL. Explicaré qué es un cambio destructivo y proporcionaré un ejemplo de código para ilustrarlo. ¡Empecemos!

Hola a todos, es un placer estar aquí y es un placer hablar sobre algo que es muy relevante para mi trabajo, que es manejar los cambios destructivos en un esquema GraphQL.

Entonces, solo una breve introducción sobre mí. Mi nombre es Kadi Kraman, actualmente soy la Directora de Desarrollo Móvil en Formidable. Si no has oído hablar de nosotros, Formidable es una consultoría. Construimos sitios web, aplicaciones móviles, y por supuesto, APIs GraphQL. En mis cinco años en esta empresa, creo que casi todos los proyectos tenían una API GraphQL en ellos. Así que hemos estado haciendo esto bastante. Allá por 2002, mi primera API GraphQL fue alrededor de 2017, y desde entonces, he trabajado con aplicaciones pequeñas y grandes, y principalmente como consumidor de API.

Entonces, porque construyo muchas aplicaciones móviles, generalmente he sido el cliente de una API GraphQL. Pasaría tal vez el 20 por ciento de mi tiempo escribiendo GraphQL, y el 80 por ciento de mi tiempo utilizando APIs GraphQL. Entonces, los cambios destructivos son algo que es muy relevante para mí porque soy el cliente que se ve afectado si ocurren cambios destructivos.

Entonces, ¿qué es un cambio destructivo? Un cambio destructivo en un esquema GraphQL es básicamente una actualización que hace que el contrato de la API cambie de una manera que no es compatible con versiones anteriores. Ahora, ¿qué significa esto realmente? Te lo voy a mostrar usando un ejemplo de código. Entonces, aquí tenemos un pequeño esquema. Tenemos una consulta donde puedes consultar un usuario por un ID y te devolverá un tipo de usuario. Y el tipo de usuario solo tiene el ID y el nombre en él. Ambos son campos obligatorios. Y si miramos cómo sería una consulta. Entonces, aquí a la derecha, vamos a consultar al usuario por ID, consultar el ID y el nombre, y obtenemos exactamente esos datos de vuelta. Entonces, supongamos que tenías este tipo de usuario en tu proyecto actual y el cliente regresa a ti y dice, oye, no queremos tener nuestro nombre como una sola cadena. Queremos tener el nombre y el apellido por separado. Entonces, como un nuevo requisito, necesitas separar el campo de nombre en nombre y apellido. Entonces, ¿cómo lo harías? Te sentirías tentado a hacer algo como esto. Entonces, aquí hemos agregado el nombre y el apellido que son ambas cadenas obligatorias. Pero entonces, porque realmente no usamos el nombre más, podemos eliminar el campo del nombre. Ahora, esto parece todo bien y bueno desde el lado del esquema, desde el lado de la API. Cuando miramos el lado del cliente y consultamos la misma consulta que hicimos antes, nos encontramos con un error. Y el error dice que no se puede consultar el campo nombre en el tipo de usuario. Y de hecho, el campo nombre ya no existe. Ahora, este es un ejemplo de un cambio destructivo.

2. Manejo de Cambios Destructivos en el Esquema GraphQL

Short description:

Un cambio que no es compatible con versiones anteriores. En lugar de eliminar el campo, podemos agregar un aviso de obsolescencia utilizando la directiva deprecated. La directiva deprecated te permite etiquetar un campo en un esquema como un campo obsoleto para comunicar a tus consumidores que este campo ya no debería ser utilizado. Es parte de la especificación GraphQL y la mayoría de los servidores GraphQL deberían implementarlo. Insomnia, un cliente GraphQL, proporciona un ejemplo de cómo se muestran los campos obsoletos en el esquema. Ahora te mostraré una forma de introducir un cambio destructivo en una API GraphQL de manera relativamente segura siguiendo los pasos: agregar, deprecar, migrar, eliminar.

Un cambio que no es compatible con versiones anteriores. Porque una consulta que funcionaba en la versión anterior de esta API ya no funciona debido a este cambio. Veamos cómo haríamos que este cambio sea compatible con versiones anteriores. Es sorprendentemente simple. En lugar de eliminar el campo, podemos agregar un aviso de obsolescencia utilizando la directiva deprecated. Aquí has visto junto al campo nombre, he agregado deprecated y también proporcioné una razón. Entonces, en este caso, está obsoleto a favor de nombre y apellido.

Y aquí podemos ver que la consulta anterior que solo consultaba el ID y el nombre todavía funciona y la nueva consulta que consulta el nombre y apellido también funciona. Por lo tanto, porque ambas consultas, la anterior y la nueva, funcionan, este es un cambio que es compatible con versiones anteriores. La directiva deprecated es realmente útil. Básicamente te permite etiquetar un campo en un esquema como un campo obsoleto para comunicar a tus consumidores que este campo ya no debería ser utilizado. Es parte de la especificación GraphQL, lo que significa que la mayoría de los servidores GraphQL deberían implementar. La parte más importante, la mayoría de los IDEs, herramientas GraphQL, y clientes que podrías estar utilizando recogerán esta notificación y te advertirán si estás utilizando un campo obsoleto.

Aquí he añadido un ejemplo. Esto es de Insomnia, que es un cliente GraphQL que utilizo para hacer consultas. Cuando miro el esquema y el tipo de usuario en particular, podemos ver que el nombre ahora tiene un signo de exclamación al lado. Si paso el cursor sobre él, me está diciendo que el campo nombre ahora está obsoleto, y también me está dando el mensaje de obsolescencia que escribí. Por lo tanto, está obsoleto a favor de nombre y apellido. Ahora puede haber una razón, sin embargo, raramente, que simplemente tendrías que introducir un cambio destructivo en la API. Así que voy a mostrarte una forma en que podrías introducir un cambio destructivo en una API GraphQL de manera relativamente segura. Las palabras clave que necesitas recordar son agregar, deprecar, migrar, eliminar. Desafortunadamente, no es un acrónimo muy bueno. Vamos a repasar estos uno por uno para mostrarte lo que significa cada paso. Así que este es nuestro estado inicial. Vamos a empezar con este tipo de usuario que usamos antes, solo con el id y un nombre. Y esta es nuestra pila de aplicaciones. Así que vamos a tener un sitio web, digamos que es una aplicación Xjs. Vamos a tener una API. Por supuesto, es una API GraphQL. Y porque construyo aplicaciones móviles, vamos a tener una aplicación React Native para iOS y Android en un tercer repositorio.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

De GraphQL Zero a GraphQL Hero con RedwoodJS
GraphQL Galaxy 2021GraphQL Galaxy 2021
32 min
De GraphQL Zero a GraphQL Hero con RedwoodJS
Top Content
Todos amamos GraphQL, pero puede ser desalentador poner en marcha un servidor y mantener tu código organizado, mantenible y testeable a largo plazo. ¡No más! Ven a ver cómo paso de un directorio vacío a una API GraphQL completamente desarrollada en cuestión de minutos. Además, verás lo fácil que es usar y crear directivas para limpiar aún más tu código. ¡Vas a amar aún más GraphQL una vez que hagas las cosas Redwood Easy!
Estado Local y Caché del Servidor: Encontrando un Equilibrio
Vue.js London Live 2021Vue.js London Live 2021
24 min
Estado Local y Caché del Servidor: Encontrando un Equilibrio
Top Content
¿Cuántas veces has implementado el mismo flujo en tu aplicación: verificar si los datos ya se han obtenido del servidor, si es así - renderizar los datos, si no - obtener estos datos y luego renderizarlos? Creo que lo he hecho más de diez veces yo mismo y he visto la pregunta sobre este flujo más de cincuenta veces. Desafortunadamente, nuestra biblioteca de gestión de estado predeterminada, Vuex, no proporciona ninguna solución para esto.Para la aplicación basada en GraphQL, había una alternativa para usar el cliente Apollo que proporcionaba herramientas para trabajar con la caché. Pero, ¿qué pasa si usas REST? Afortunadamente, ahora tenemos una alternativa de Vue a una biblioteca de react-query que proporciona una buena solución para trabajar con la caché del servidor. En esta charla, explicaré la distinción entre el estado de la aplicación local y la caché del servidor local y haré algo de codificación en vivo para mostrar cómo trabajar con este último.
Despídete de tus esquemas de API con tRPC
React Day Berlin 2022React Day Berlin 2022
29 min
Despídete de tus esquemas de API con tRPC
¿Sabías que podemos reemplazar los esquemas de API con una biblioteca liviana y segura? Con tRPC, puedes reemplazar fácilmente GraphQL o REST con formas inferidas sin esquemas ni generación de código. En esta charla, entenderemos los beneficios de tRPC y cómo aplicarlo en una aplicación de NextJs. Si quieres reducir la complejidad de tu proyecto, no te puedes perder esta charla.
Baterías Incluidas Reimaginadas - El Resurgimiento de GraphQL Yoga
GraphQL Galaxy 2021GraphQL Galaxy 2021
33 min
Baterías Incluidas Reimaginadas - El Resurgimiento de GraphQL Yoga
El Guild ha lanzado recientemente Envelop - un nuevo y moderno Framework de Servidor GraphQL y sistema de plugins. En esta charla compartiré una breve descripción de Envelop y por qué probablemente deberías actualizar tu servidor GraphQL existente a él.
Aplicaciones sólidas de React y GraphQL para personas con prisa
GraphQL Galaxy 2022GraphQL Galaxy 2022
29 min
Aplicaciones sólidas de React y GraphQL para personas con prisa
En esta charla, veremos algunas de las opciones modernas para construir una aplicación full-stack de React y GraphQL con convenciones sólidas y cómo esto puede ser de enorme beneficio para ti y tu equipo. Nos enfocaremos específicamente en RedwoodJS, un framework full stack de React que a menudo se llama 'Ruby on Rails para React'.

Workshops on related topic

Construir con SvelteKit y GraphQL
GraphQL Galaxy 2021GraphQL Galaxy 2021
140 min
Construir con SvelteKit y GraphQL
Top Content
Featured WorkshopFree
Scott Spence
Scott Spence
¿Alguna vez has pensado en construir algo que no requiera mucho código de plantilla con un tamaño de paquete pequeño? En esta masterclass, Scott Spence irá desde el hola mundo hasta cubrir el enrutamiento y el uso de endpoints en SvelteKit. Configurarás una API de GraphQL en el backend y luego usarás consultas de GraphQL con SvelteKit para mostrar los datos de la API de GraphQL. Construirás un proyecto rápido y seguro que utiliza las características de SvelteKit, y luego lo desplegarás como un sitio completamente estático. Este curso es para los curiosos de Svelte que no han tenido una experiencia extensa con SvelteKit y quieren una comprensión más profunda de cómo usarlo en aplicaciones prácticas.

Tabla de contenidos:
- Inicio e introducción a Svelte
- Inicializar el proyecto frontend
- Recorrido por el proyecto esqueleto de SvelteKit
- Configurar el proyecto backend
- Consultar datos con GraphQL
- Recuperación de datos en el frontend con GraphQL
- Estilización
- Directivas de Svelte
- Enrutamiento en SvelteKit
- Endpoints en SvelteKit
- Despliegue en Netlify
- Navegación
- Mutaciones en GraphCMS
- Envío de mutaciones GraphQL a través de SvelteKit
- Preguntas y respuestas
Seguridad de tipo de extremo a extremo con React, GraphQL y Prisma
React Advanced Conference 2022React Advanced Conference 2022
95 min
Seguridad de tipo de extremo a extremo con React, GraphQL y Prisma
Featured WorkshopFree
Sabin Adams
Sabin Adams
En este masterclass, obtendrás una visión de primera mano de lo que es la seguridad de tipo de extremo a extremo y por qué es importante. Para lograr esto, construirás una API de GraphQL utilizando herramientas modernas y relevantes que serán consumidas por un cliente de React.
Prerrequisitos: - Node.js instalado en tu máquina (12.2.X / 14.X)- Se recomienda (pero no es obligatorio) utilizar VS Code para las tareas prácticas- Un IDE instalado (se recomienda VSCode)- (Bueno tener) *Un conocimiento básico de Node.js, React y TypeScript
GraphQL para Desarrolladores de React
GraphQL Galaxy 2022GraphQL Galaxy 2022
112 min
GraphQL para Desarrolladores de React
Featured Workshop
Roy Derks
Roy Derks
Hay muchas ventajas en utilizar GraphQL como fuente de datos para el desarrollo frontend, en comparación con las API REST. Nosotros, los desarrolladores, por ejemplo, necesitamos escribir mucho código imperativo para recuperar datos y mostrarlos en nuestras aplicaciones y manejar el estado. Con GraphQL, no solo puedes reducir la cantidad de código necesario para la obtención de datos y la gestión del estado, sino que también obtendrás una mayor flexibilidad, mejor rendimiento y, sobre todo, una mejor experiencia de desarrollo. En este masterclass aprenderás cómo GraphQL puede mejorar tu trabajo como desarrollador frontend y cómo manejar GraphQL en tu aplicación frontend de React.
Construye una aplicación WordPress sin cabeza con Next.js y WPGraphQL
React Summit 2022React Summit 2022
173 min
Construye una aplicación WordPress sin cabeza con Next.js y WPGraphQL
Top Content
WorkshopFree
Kellen Mace
Kellen Mace
En esta masterclass, aprenderás cómo construir una aplicación Next.js que utiliza Apollo Client para obtener datos de un backend de WordPress sin cabeza y usarlo para renderizar las páginas de tu aplicación. Aprenderás cuándo debes considerar una arquitectura de WordPress sin cabeza, cómo convertir un backend de WordPress en un servidor GraphQL, cómo componer consultas usando el IDE GraphiQL, cómo colocar fragmentos GraphQL con tus componentes, y más.
Modelado de Bases de Datos Relacionales para GraphQL
GraphQL Galaxy 2020GraphQL Galaxy 2020
106 min
Modelado de Bases de Datos Relacionales para GraphQL
Top Content
WorkshopFree
Adron Hall
Adron Hall
En esta masterclass profundizaremos en el modelado de datos. Comenzaremos con una discusión sobre varios tipos de bases de datos y cómo se mapean a GraphQL. Una vez que se haya establecido esa base, el enfoque se desplazará a tipos específicos de bases de datos y cómo construir modelos de datos que funcionen mejor para GraphQL en varios escenarios.
Índice de contenidosParte 1 - Hora 1      a. Modelado de Datos de Bases de Datos Relacionales      b. Comparando Bases de Datos Relacionales y NoSQL      c. GraphQL con la Base de Datos en menteParte 2 - Hora 2      a. Diseño de Modelos de Datos Relacionales      b. Relación, Construcción de Tablas Multijoin      c. Complejidades de Consulta de Modelado de Datos Relacionales y GraphQL
Prerrequisitos      a. Herramienta de modelado de datos. El formador utilizará dbdiagram      b. Postgres, aunque no es necesario instalar esto localmente, ya que estaré utilizando una imagen de Dicker de Postgres, de Docker Hub para todos los ejemplos      c. Hasura
Construyendo APIs GraphQL sobre Ethereum con The Graph
GraphQL Galaxy 2021GraphQL Galaxy 2021
48 min
Construyendo APIs GraphQL sobre Ethereum con The Graph
WorkshopFree
Nader Dabit
Nader Dabit
The Graph es un protocolo de indexación para consultar redes como Ethereum, IPFS y otras blockchains. Cualquiera puede construir y publicar APIs abiertas, llamadas subgrafos, para hacer que los datos sean fácilmente accesibles.

En este masterclass aprenderás cómo construir un subgrafo que indexa datos de blockchain de NFT del contrato inteligente Foundation. Desplegaremos la API y aprenderemos cómo realizar consultas para recuperar datos utilizando diferentes tipos de patrones de acceso a datos, implementando filtros y ordenamiento.

Al final del masterclass, deberías entender cómo construir y desplegar APIs de alto rendimiento en The Graph para indexar datos de cualquier contrato inteligente desplegado en Ethereum.