Construyendo aplicaciones GraphQL de pila completa con Hasura y Vue 3

Rate this content
Bookmark

El ecosistema frontend avanza a un ritmo frenético. Este masterclass tiene como objetivo equipar a los participantes con una comprensión del estado del ecosistema Vue 3 + GraphQL, explorando ese ecosistema - prácticamente y a través del desarrollo de aplicaciones de pila completa.

Tabla de contenidos
- Los participantes utilizarán Hasura para construir una API GraphQL en tiempo real respaldada por Postgres. Juntos recorreremos su consumo desde un frontend y haremos que el frontend sea reactivo, suscrito a los cambios de datos.
- Además, analizaremos las herramientas comúnmente utilizadas en el stack Vue GraphQL (como Apollo Client y Urql), discutiremos algunas alternativas menos conocidas y abordaremos los problemas frecuentemente encontrados al comenzar.
- Se describirán varios patrones para gestionar datos con estado y sus compensaciones durante el masterclass, y se mostrará una implementación básica para cada patrón discutido.
Nivel del masterclass

NOTA: No se requiere experiencia previa con GraphQL, pero puede ser útil para ayudar a la comprensión. Se cubrirán los fundamentos.

This workshop has been presented at Vue.js London Live 2021, check out the latest edition of this JavaScript Conference.

FAQ

GraphQL es una tecnología que permite a los desarrolladores solicitar exactamente los datos que necesitan, sin más ni menos. Mejora la ergonomía de las API al permitir la creación de APIs más flexibles y eficientes en comparación con la arquitectura RESTful, reduciendo así el número de llamadas a la API y la cantidad de datos transferidos.

Hasura es un motor de GraphQL que facilita la construcción de aplicaciones CRUD al permitir a los desarrolladores tomar una fuente de datos como Postgres, MySQL, SQL Server, entre otros, y crear automáticamente una API CRUD en tiempo real con autenticación y funciones adicionales como permisos y uniones de datos.

GraphQL permite a los desarrolladores solicitar múltiples recursos en una sola llamada a la API, mientras que REST requiere múltiples llamadas para obtener diferentes tipos de recursos. Además, GraphQL permite especificar exactamente qué campos se desean, lo que evita recibir datos innecesarios, optimizando así las respuestas de la API.

Las suscripciones en GraphQL permiten a los clientes recibir datos en tiempo real cada vez que se actualiza un dato relevante en el servidor. Funcionan sobre WebSockets, facilitando la construcción de interfaces de usuario reactivas y dinámicas al notificar a los clientes sobre los cambios en la base de datos de manera instantánea.

Hasura Cloud es una versión administrada del producto de código abierto de Hasura que ofrece características adicionales como análisis, límites de velocidad y seguridad mejorada. Proporciona una infraestructura robusta para desplegar aplicaciones GraphQL a gran escala, optimizando la gestión y el desempeño de las aplicaciones.

GraphQL Code Generator es una herramienta que genera código tipado para diferentes frameworks a partir de esquemas GraphQL. Facilita la integración y el desarrollo en el cliente al proporcionar autocompletado y validación de tipos en tiempo de desarrollo, asegurando que las consultas y mutaciones cumplan con el esquema definido.

Gavin Ray
Gavin Ray
115 min
19 Oct, 2021

Comments

Sign in or register to post your comment.
Video Summary and Transcription
GraphQL es una herramienta poderosa para construir APIs, ofreciendo flexibilidad en la recuperación de datos y funcionalidad en tiempo real. Simplifica la documentación de la API y mejora el desarrollo con verificación de tipos y generación de código. Hasura es un motor GraphQL popular que admite suscripciones, permisos e integraciones de bases de datos. El masterclass cubre temas como la configuración de APIs GraphQL, el manejo de permisos y seguridad, la integración de autenticación y el uso de GraphQL con Vue.js. También se discuten varias bibliotecas y herramientas para trabajar con APIs GraphQL y la gestión de estado.

1. Introducción a la API de GraphQL

Short description:

Cubriremos la comparación entre la arquitectura RESTful y la construcción de API de GraphQL. El motor GraphQL de Hasura te permite crear un gráfico de datos unificado al crear una API CRUD en tiempo real con autenticación y otras características. Es de código abierto. En una API REST, hacer una llamada a la API requiere múltiples llamadas y puede llevar a una arquitectura de API compleja. GraphQL resuelve este problema al proporcionar automáticamente los datos que solicitas.

Entonces, um, trataremos de ir a un ritmo moderado. Algunas personas pueden estar muy familiarizadas con esto, otras no tanto. Pero, uh, sí, vamos a cubrir esto. Así que hay un par de cosas realmente increíbles sobre la API de GraphQL, GraphQL y una de ellas es la ergonomía de la API. Esto básicamente va a explicar, um, la arquitectura RESTful en comparación con la construcción de API de GraphQL, lo cual creo que es algo con lo que todos podremos establecer paralelismos seguro que todos hemos construido una aplicación CRUD en nuestras vidas. Así que soy un evangelista técnico de una empresa llamada Hasura. Es un motor de GraphQL. Um, muy genial. Básicamente, te permite tomar una fuente de datos, que puede ser Postgres, podría ser MySQL, SQL Server, podrían ser otras API que pueden ser REST o GraphQL y básicamente crea automáticamente una API CRUD en tiempo real con autenticación y algunas otras cosas interesantes encima de ella y te permite asignar permisos y unir data entre fuentes de data como si fuera un solo gráfico de data unificado. Uh, ah, y también es de código abierto. Así que uh, hablaremos de una llamada a la API. Entonces, en una API REST, cuando haces una llamada a la API, ¿verdad? Um, haces algo como obtener API, barra diagonal usuario, y pasas un ID y obtienes esta, uh, respuesta HTTP. Uh, vamos a verificar. Lo siento. ¿Alguien tiene sonido? Lo siento, hay como un montón de mensajes. Uh, ¿funciona mi audio para todos? Sí. Sí. De acuerdo. De acuerdo. Gracias. Gracias a todos. Um, de acuerdo. Sí, entonces tienes alguna aplicación, uh, y tu aplicación va a hacer una llamada a una API. Las solicitudes GET podrían verse así y va a devolver una respuesta HTTP, ¿verdad? Algo de JSON que se ve así, ¿verdad? Así que tenemos a Elmo. Si queremos más información, ¿verdad? Como, ¿qué pasa si queremos la dirección de Elmo?, entonces necesitamos llamar a la API de dirección y necesitamos darle el ID de usuario que acabamos de solicitar a través de REST. Así que eso son dos llamadas a la API. Y eso solo empeora. Um, y puedes paralelizar estas llamadas a la API en REST, puedes agruparlas. Puedes crear API personalizadas que devuelvan, ya sabes, formas exactas de data. Pero básicamente este problema va a persistir sin importar lo que hagas porque esa es la naturaleza de REST. Voy a mover esta ventana de chat. Si piensas en una página, ¿verdad? No estás renderizando solo una entidad aislada. Entonces, si piensas en un usuario y tienes un modelo de data jerárquico, probablemente quieras renderizar ese usuario. Es posible que desees renderizar su dirección, es posible que desees renderizar su historial de pedidos, es posible que desees renderizar una lista de amigos. Hay esta jerarquía en cascada de dependencias e interrelaciones, y todas estas necesitan resolverse en las solicitudes a la API. Así que digamos que tenemos un problema, ¿verdad? Obtenemos una nueva... Como una aplicación móvil diseñada para una página y es realmente complicada, y requeriría como ocho llamadas REST. Así que volvemos a nuestros desarrolladores de API y ellos dicen, oye... ¿Podrías escribirme solo esta llamada especial a la API que devuelve esta forma exacta de data? Porque eso me facilitaría mucho la vida. Y así obtienes esta nueva llamada especializada a la API, ¿verdad? Entonces dicen, de acuerdo, bien. Y obtienes este punto final de la API de información de usuario y ahora tienes a Elmo y su dirección. Entonces el problema es que si sigues haciendo esto, lo que va a suceder es que tu architecture de API se convertirá en un absoluto desastre. Y terminas con más y más de estas llamadas especializadas a la API, o simplemente tienes más y más llamadas REST intercaladas y dependientes en cascada. Y entonces una cosa que podrías hacer es decir, bueno, ya sabes qué, voy a implementar algún tipo de filtro de campos. Así que solo voy a pedir los campos que quiero. Y eso funciona. Es un poco de un parche de cinta adhesiva, pero funciona. Pero con GraphQL, no tienes que hacer eso. Con GraphQL, la forma en que funciona es que los data que quieres se obtienen automáticamente es el data que solicitaste. Así que si quieres a Elmo, quieres su nombre, quieres su dirección en la calle,

2. Conceptos básicos de la API de GraphQL

Short description:

Los modelos de API suelen tener una estructura similar a un grafo, lo que hace que las bases de datos relacionales sean populares. GraphQL permite la recuperación flexible de datos con control sobre la jerarquía. GraphQL es una especificación, no una tecnología especial, para manejar las solicitudes y respuestas de la API. Utiliza un único punto final y admite solicitudes POST con campos de consulta y variables. Las mutaciones en GraphQL actúan como publicaciones, actualizaciones y eliminaciones. La consulta se utiliza para obtener información, mientras que las mutaciones se utilizan para modificar datos.

simplemente envías una carga útil a través de la red. Esto es, Hola, me gustaría JSON en esta estructura y la API dice, de acuerdo, aquí lo tienes. Es un poco más complicado que eso, pero esa es la premisa. Um, así que hay un par de ideas clave aquí. Y una de ellas es que casi siempre los modelos de tu API, uh, tienen una estructura similar a un grafo, uh, y por eso las bases de datos relacionales son tan populares. Um, no es muy común encontrarse, uh, escribiendo entidades que no tengan algún tipo de relación y que sean solo modelos planos y desconectados de todo. De acuerdo. Cuando estás recorriendo este grafo de datos, um, quieres controlar los datos que obtienes, porque no quieres, no quieres, no quieres obtener toda esta jerarquía de datos. Uh, pero al mismo tiempo, realmente deseas la flexibilidad de decir, uh, necesito este modelo, pero también solo uno o dos campos de un modelo hijo o padre. Um, y GraphQL te permite hacer eso. Entonces, la forma en que funciona un grafo, la forma en que funciona GraphQL es, uh, tienes tres tipos de operaciones. Entonces tienes consultas, mutaciones y suscripciones, um, donde las consultas se mapean al verbo GET, ¿verdad? Cuando piensas en una API REST, cumplen el papel de lo que normalmente se usaría para las solicitudes GET. Entonces, esta consulta de GraphQL está diciendo, Hola, quiero un usuario. Me gustaría su ID y nombre. Quiero la dirección del usuario, uh, relación. Um, y quiero la calle, uh, de la dirección del usuario, ¿verdad? Así que la dirección del usuario, la calle. Y quiero que sea solo para el usuario con el ID. Uno y la forma en que esto funciona internamente, um, no hay mucha magia aquí. Um, así que GraphQL es solo una solicitud HTTP regular. Entonces, si sabes cómo hacer una solicitud POST o una solicitud GET y una solicitud PUT, usando curl o Postman o usando la API fetch, ya sabes cómo usar GraphQL. Um, mucha gente piensa que GraphQL es algún tipo de tecnología especial o protocolo, uh, que se admite, pero no lo es, uh, es solo una especificación de cómo tu API debe manejar las solicitudes y respuestas, al igual que REST.

Entonces, la forma en que funciona GraphQL es que tienes un único punto final y, uh, acepta solicitudes POST. Por lo general, puedes permitir que acepte solicitudes GET, pero es inusual. Y básicamente solo envías una, uh, una solicitud fetch a esta API, que es de tipo application/json. Y solo hay dos campos, uh, que necesitas incluir aquí. Entonces uno es la consulta. Aquí está nuestra consulta. Y, um, esto simplemente se incluiría en un objeto de cuerpo de solicitud fetch, uh, en JavaScript. Uh, el otro, uh, que probablemente veremos en un segundo, son las variables, uh, que te permitirán sustituir una variable real por cosas como el ID. Y luego el tercero, uh, esto es opcional, es darle un nombre de operación y eso se usa principalmente para cosas como métricas, análisis y seguimiento, solo para que puedas saber qué operaciones se están ejecutando. Es como, um, es como una etiqueta de operación, ¿verdad? Entonces enviamos la consulta de GraphQL como una cadena en JSON a nuestra API. Y lo que obtenemos a cambio, uh, es solo un objeto JSON que se ve exactamente como el objeto de consulta, uh, que enviamos en la solicitud. Entonces, cuando escribirías a una API REST, uh, normalmente harías una solicitud POST a algo como /API/tarea, uh, le darías una tarea, y luego enviaría este 200. De acuerdo. Y diría, bien, hombre, hice esta tarea y aquí está tu nuevo ID de tarea. Um, la forma de hacer esto en GraphQL es usando mutaciones y las mutaciones cumplen el papel de varios verbos HTTP. Um, que podríamos ver en un segundo. Entonces, las mutaciones actúan como publicaciones, las mutaciones actúan como parches o actualizaciones y las mutaciones también actúan como eliminaciones. Entonces, puede ser obvio por el nombre, pero la consulta se utiliza para obtener información y las mutaciones se utilizan para modificar, uh, datos. Aquí vemos un ejemplo de mutación donde agregamos una tarea, y toma este signo de dólar como una variable. Entonces decimos que toma una tarea, um, variable llamada nueva tarea y devuelve el ID. Y luego, cuando enviamos esto en nuestra solicitud HTTP, lo único que necesitamos hacer es darle una nueva clave de variables que tenga la nueva tarea y la tarea que queremos. Entonces, uh, puedes verlo aquí mismo, es la nueva tarea de GraphQL. Vamos a retroceder la diapositiva. Um, ahora quiero volver atrás. Uh, es lo mismo. Así que solo toma, toma tus datos y colócalos bajo el nombre de variable y la mutación. Y luego, nuevamente, obtendrás esta respuesta 200 y te dará este ID porque el ID es

QnA

Watch more workshops on 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
Vue3: Desarrollo Moderno de Aplicaciones Frontend
Vue.js London Live 2021Vue.js London Live 2021
169 min
Vue3: Desarrollo Moderno de Aplicaciones Frontend
Top Content
Featured WorkshopFree
Mikhail Kuznetsov
Mikhail Kuznetsov
Vue3 fue lanzado a mediados de 2020. Además de muchas mejoras y optimizaciones, la principal característica que trae Vue3 es la API de Composición, una nueva forma de escribir y reutilizar código reactivo. Aprendamos más sobre cómo usar la API de Composición de manera eficiente.

Además de las características principales de Vue3, explicaremos ejemplos de cómo usar bibliotecas populares con Vue3.

Tabla de contenidos:
- Introducción a Vue3
- API de Composición
- Bibliotecas principales
- Ecosistema Vue3

Requisitos previos:
IDE de elección (Inellij o VSC) instalado
Nodejs + NPM
Desarrollando Blogs Dinámicos con SvelteKit & Storyblok: Una Masterclass Práctica
JSNation 2023JSNation 2023
174 min
Desarrollando Blogs Dinámicos con SvelteKit & Storyblok: Una Masterclass Práctica
Top Content
Featured WorkshopFree
Alba Silvente Fuentes
Roberto Butti
2 authors
Esta masterclass de SvelteKit explora la integración de servicios de terceros, como Storyblok, en un proyecto SvelteKit. Los participantes aprenderán cómo crear un proyecto SvelteKit, aprovechar los componentes de Svelte y conectarse a APIs externas. La masterclass cubre conceptos importantes incluyendo SSR, CSR, generación de sitios estáticos y despliegue de la aplicación usando adaptadores. Al final de la masterclass, los asistentes tendrán una sólida comprensión de la construcción de aplicaciones SvelteKit con integraciones de API y estarán preparados para el despliegue.
Construye Aplicaciones Modernas Utilizando GraphQL y Javascript
Node Congress 2024Node Congress 2024
152 min
Construye Aplicaciones Modernas Utilizando GraphQL y Javascript
Featured Workshop
Emanuel Scirlet
Miguel Henriques
2 authors
Ven y aprende cómo puedes potenciar tus aplicaciones modernas y seguras utilizando GraphQL y Javascript. En este masterclass construiremos una API de GraphQL y demostraremos los beneficios del lenguaje de consulta para APIs y los casos de uso para los que es adecuado. Se requiere conocimiento básico de Javascript.
Seguridad de tipo de extremo a extremo con React, GraphQL y Prisma
React Advanced 2022React Advanced 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.

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

Todo Más Allá de la Gestión de Estado en Tiendas con Pinia
Vue.js London Live 2021Vue.js London Live 2021
34 min
Todo Más Allá de la Gestión de Estado en Tiendas con Pinia
Top Content
State management is not limited to complex applications and transitioning to a store offers significant benefits. Pinia is a centralized state management solution compatible with Vue 2 and Vue 3, providing advanced devtools support and extensibility with plugins. The core API of Pinia is similar to Vuex, but with a less verbose version of stores and powerful plugins. Pinia allows for easy state inspection, error handling, and testing. It is recommended to create one file per store for better organization and Pinia offers a more efficient performance compared to V-rex.
Bienvenido a Nuxt 3
Vue.js London Live 2021Vue.js London Live 2021
29 min
Bienvenido a Nuxt 3
Top Content
Nux3 has made significant improvements in performance, output optimization, and serverless support. Nuxt Bridge brings the Nitro engine for enhanced performance and easier transition between Nuxt 2 and Nuxt Read. Nuxt 3 supports Webpack 5, Bytes, and Vue 3. NextLab has developed brand new websites using Docus technology. Nuxt.js is recommended for building apps faster and simpler, and Nuxt 2 should be used before migrating to Nuxt 3 for stability. DOCUS is a new project that combines Nuxt with additional features like content modules and an admin panel.
Un Año en Vue 3
Vue.js London Live 2021Vue.js London Live 2021
20 min
Un Año en Vue 3
Top Content
Vue 3 has seen significant adoption and improvements in performance, bundle size, architecture, and TypeScript integration. The ecosystem around Vue 3 is catching up, with new tools and frameworks being developed. The Vue.js.org documentation is undergoing a complete overhaul. PNIA is emerging as the go-to state management solution for Vue 3. The options API and composition API are both viable options in Vue 3, with the choice depending on factors such as complexity and familiarity with TypeScript. Vue 3 continues to support CDN installation and is recommended for new projects.
Utilizando Rust desde Vue con WebAssembly
Vue.js London Live 2021Vue.js London Live 2021
8 min
Utilizando Rust desde Vue con WebAssembly
Top Content
In this Talk, the speaker demonstrates how to use Rust with WebAssembly in a Vue.js project. They explain that WebAssembly is a binary format that allows for high-performance code and less memory usage in the browser. The speaker shows how to build a Rust example using the WasmPack tool and integrate it into a Vue template. They also demonstrate how to call Rust code from a Vue component and deploy the resulting package to npm for easy sharing and consumption.
Vue: Actualizaciones de Características
Vue.js London 2023Vue.js London 2023
44 min
Vue: Actualizaciones de Características
Top Content
The Talk discusses the recent feature updates in Vue 3.3, focusing on script setup and TypeScript support. It covers improvements in defining props using imported types and complex types support. The introduction of generic components and reworked signatures for defined components provides more flexibility and better type support. Other features include automatic inference of runtime props, improved define emits and defined slots, and experimental features like reactive props destructure and define model. The Talk also mentions future plans for Vue, including stabilizing suspense and enhancing computer invalidations.
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
Tom Pressenwurter introduces Redwood.js, a full stack app framework for building GraphQL APIs easily and maintainably. He demonstrates a Redwood.js application with a React-based front end and a Node.js API. Redwood.js offers a simplified folder structure and schema for organizing the application. It provides easy data manipulation and CRUD operations through GraphQL functions. Redwood.js allows for easy implementation of new queries and directives, including authentication and limiting access to data. It is a stable and production-ready framework that integrates well with other front-end technologies.