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

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.

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.

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

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.
Construir con SvelteKit y GraphQL
GraphQL Galaxy 2021GraphQL Galaxy 2021
140 min
Construir con SvelteKit y GraphQL
Top Content
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
Monitoreo 101 para Desarrolladores de React
React Summit US 2023React Summit US 2023
107 min
Monitoreo 101 para Desarrolladores de React
Top Content
WorkshopFree
Lazar Nikolov
Sarah Guthals
2 authors
Si encontrar errores en tu proyecto frontend es como buscar una aguja en un pajar de código, entonces el monitoreo de errores de Sentry puede ser tu detector de metales. Aprende los conceptos básicos del monitoreo de errores con Sentry. Ya sea que estés ejecutando un proyecto de React, Angular, Vue, o simplemente JavaScript “vainilla”, mira cómo Sentry puede ayudarte a encontrar el quién, qué, cuándo y dónde detrás de los errores en tu proyecto frontend.
Nivel de la masterclass: Intermedio
Usando Nitro - Construyendo una Aplicación con el Último Motor de Renderizado de Nuxt
Vue.js London Live 2021Vue.js London Live 2021
117 min
Usando Nitro - Construyendo una Aplicación con el Último Motor de Renderizado de Nuxt
Top Content
WorkshopFree
Daniel Roe
Daniel Roe
Construiremos un proyecto Nuxt juntos desde cero usando Nitro, el nuevo motor de renderizado de Nuxt, y Nuxt Bridge. Exploraremos algunas de las formas en que puedes usar y desplegar Nitro, mientras construimos una aplicación juntos con algunas de las restricciones del mundo real que enfrentarías al desplegar una aplicación para tu empresa. En el camino, dispara tus preguntas hacia mí y haré lo mejor para responderlas.
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
Workshop
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
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
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

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.