Volteando la Nube al Revés

Rate this content
Bookmark

GraphQL se está utilizando de formas realmente interesantes en partes del ecosistema de desarrolladores que te sorprendería escuchar, incluyendo Ethereum, así como para construir gráficos completos a partir de diversas APIs de terceros. En esta charla, mostraré cómo utilizar un enfoque similar para construir una interfaz de programación en la nube en AWS con GraphQL y por qué utilizar este enfoque tiene sentido para un desarrollador de front-end que busca aprovechar sus habilidades existentes.

36 min
14 May, 2021

Video Summary and Transcription

La charla de hoy discute cómo voltear la nube al revés utilizando GraphQL, destacando sus beneficios como validación de tipos, capacidades en tiempo real y eficiencia de consultas. Explora el uso de GraphQL como una puerta de enlace de API, especialmente en el contexto de microservicios, APIs de terceros y blockchain. La charla también cubre la indexación eficiente y la integración en la nube ofrecida por GraphQL, así como la construcción de APIs en la nube con AWS utilizando API Gateway y AWS AppSync. Concluye con ideas sobre cómo implementar APIs de GraphQL con herramientas como Amplify y CDK, y cómo crear APIs de GraphQL respaldadas por Lambda y DynamoDB.

Available in English

1. Introducción a GraphQL y Programación en la Nube

Short description:

Hoy voy a hablar sobre cómo convertir la nube del revés, creando una interfaz de programación en la nube con GraphQL. Vamos a empezar hablando de por qué GraphQL, por qué la gente está usando GraphQL y el estado actual del ecosistema de GraphQL. Vamos a ver cómo implementar lo que estoy hablando en la nube y darle la vuelta a la nube con una representación de esquema GraphQL. Y luego vamos a ver un poco de código. GraphQL es un lenguaje de consulta y manipulación de datos de código abierto para APIs y un tiempo de ejecución para cumplir consultas con datos existentes. Proporciona beneficios como la validación y comprobación de tipos, capacidades en tiempo real y eficiencia de consultas a través de un único punto final.

Hoy voy a hablar sobre cómo convertir la cloud del revés, creando una interfaz de programación en la cloud con GraphQL. Esto es mi enfoque como desarrollador front-end al construir aplicaciones en la cloud utilizando GraphQL con AWS y las cosas que he aprendido en los últimos años cuando trabajaba en AWS.

Entonces, ¿quién soy yo? Mi nombre es Nader Dhabit. Actualmente acabo de empezar a trabajar en una nueva empresa llamada Edge and Node. Edge and Node crea y soporta protocolos, aplicaciones y dApps en el ecosistema Web 3 y DeFi. Si estás interesado en saber más sobre lo que estoy haciendo ahora, contáctame en Twitter, dhabit3. También soy desarrollador web y móvil de profesión. Hago mucha enseñanza, escribo mucho y contribuyo bastante al código abierto.

Entonces, ¿cómo se va a dividir esta charla? Primero vamos a hablar de por qué GraphQL, por qué la gente está usando GraphQL y el estado actual del ecosistema de GraphQL. Vamos a hablar de la filosofía detrás de algunas de las cosas que voy a presentar hoy. Luego vamos a ver cómo implementar lo que estoy hablando en la cloud y darle la vuelta a la cloud con una representación de esquema GraphQL. Y luego vamos a ver un poco de código.

Así que empecemos hablando de GraphQL. No voy a hablar de qué es GraphQL en el sentido de la tecnología y cómo funciona. En su lugar, voy a hablar más sobre los beneficios de por qué la gente podría usar GraphQL, así como dónde se encuentra actualmente en el ecosistema. GraphQL es un lenguaje de consulta y manipulación de datos de código abierto para APIs y un tiempo de ejecución para cumplir consultas con datos existentes. A estas alturas probablemente hayas oído mucho sobre GraphQL, así que no quiero aburrirte con muchos detalles aquí. Solo piensa en GraphQL como una especie de reemplazo u otra opción además de Rust. Vamos a hablar de algunos de los beneficios. Estos son beneficios conocidos, pero también un poco de mi perspectiva sobre por qué me gusta GraphQL y por qué he visto a mucha gente adoptándolo, especialmente cuando trabajaba en... Validación de tipos. Obtiene validación y comprobación de tipos de forma nativa. Esto funciona muy bien con muchas de las aplicaciones que estoy construyendo en estos días con cosas como TypeScript y Dart con Flutter. El tiempo real es parte de la especificación real. En lugar de tener que decidir si quieres implementar WebSockets, polling, servidores y eventos, GraphQL normalmente tiene una especificación sobre cómo puedes hacer esto. Los detalles de implementación dependen de ti, pero mucha gente suele utilizar WebSockets para implementar suscripciones. Como desarrollador front-end, realmente no necesito entender los detalles de implementación de nadie bajo el capó. Facilita el cambio entre APIs y entender cómo funciona la parte de tiempo real. Eficiencia de consultas, terminas con un único punto final de GraphQL, pero con ese punto final de GraphQL puedes enviar tantas solicitudes como desees en una sola solicitud. De esto se derivan algunas cosas.

2. Beneficios de GraphQL y Aprender una vez

Short description:

GraphQL te permite enviar múltiples operaciones en una sola solicitud, evitando el sobreconsumo y el subconsumo. También genera automáticamente documentación de API a través de la introspección. Aprender GraphQL permite a los desarrolladores sumergirse en cualquier API y ser inmediatamente productivos. GraphQL proporciona consistencia y eficiencia, similar a la capacidad de React para construir diversas aplicaciones. Permite a los desarrolladores ser eficientes en diferentes capas sin tener que aprender nuevas tecnologías.

En primer lugar, si quiero tal vez hacer un evento de carga propio cuando mi aplicación se carga, puedo enviar múltiples operaciones en una sola operación GraphQL. Así que puedo decir consultar los datos del usuario, tal vez consultar los datos de los productos para una tienda de comercio electrónico que no voy a renderizar en la página. Incluso puedo obtener datos del carrito de compras que necesito. Todo esto se puede enviar en una sola solicitud en lugar de múltiples solicitudes. Pero también evita el sobreconsumo y el subconsumo en el sentido de que una vez que hayas construido tus consultas y mutaciones de GraphQL, supongo que en este caso serían consultas, puedes pedir exactamente los datos que deseas sin tener que escribir ningún código adicional en el backend. Entonces, para una aplicación que tiene múltiples vistas, tal vez algo que tiene una interfaz web también como una interfaz móvil, en lugar de tener que escribir diferentes puntos finales de API, puedes tener un único punto final de API, obtener los datos más ligeros en la aplicación móvil y luego los datos más pesados en la aplicación web, y todo funciona sin tener que escribir más código.

Una cosa realmente genial de GraphQL es que se documenta automáticamente. Genera automáticamente la documentación de tu API. Esto se hace utilizando la introspección de GraphQL. La introspección es esencialmente la capacidad de consultar qué recursos están disponibles en el esquema de la API actual, y una vez que se te da la API a través de la introspección, puedes ver las consultas, tipos, campos y directivas que admite. Una de las cosas importantes que voy a destacar en esta charla hoy es la consistencia. Para mí, una gran cosa al construir software y aprender a ser un desarrollador eficiente y bueno, para mí y mi career, ha sido encontrar cosas que me permitan aprender una vez y usar en múltiples lugares y ser eficiente. Por ejemplo, una de esas cosas es React. Como desarrollador de React, aprendo React, ahora puedo construir aplicaciones web, pero también puedo construir aplicaciones móviles aplicaciones de escritorio, todo tipo de cosas que la gente hace con React. Alguien, ya sabes, está presentando cómo construir, ya sabes, no solo diapositivas, sino en un software de edición de videos, cosas así. Aprendes React, haces muchas cosas. GraphQL, lo agrupo de una manera similar en el sentido de que una vez que aprendes GraphQL, puedes sumergirte en la API de cualquier persona, no solo dentro de tu propia empresa, sino dentro de cualquier empresa. Entonces, si te vas, te unes a otra empresa, sabes cómo usar GraphQL, puedes ser inmediatamente productivo. Miras el gráfico, sabes lo que está pasando. Pero lo que es aún más interesante son algunas de las cosas que voy a ver y mostrar en un momento en el que las personas están implementando estas implementaciones más grandes y más interesantes de gráficos y diferentes ecosistemas, y yo como desarrollador de GraphQL, en realidad puedo ir y ser muy, muy eficiente en esas diferentes capas sin tener que aprender nada. Y esto es algo que tuiteé hace poco tiempo, GraphQL, aprende una vez, crea, lee, actualiza, elimina y suscríbete en cualquier lugar. Es una especie de juego con React, aprende una vez, escribe en cualquier lugar o algo así. Lo siento, eso fue React Native. En general, es la misma idea.

3. Using GraphQL as an API Gateway

Short description:

GraphQL es perfecto para sistemas complejos y microservicios. Unifica múltiples sistemas detrás de su API y oculta su complejidad. El sentimiento de los desarrolladores hacia GraphQL es alto. Esta charla trata sobre el uso de GraphQL como una puerta de enlace de API y cubre microservicios, APIs de terceros, Blockchain y Ethereum.

Y luego lo segundo que voy a enfatizar es la consistencia, pero también la implementación de GraphQL en una arquitectura de microservicios. GraphQL es perfecto para sistemas complejos y microservicios como he explicado aquí. Pero esencialmente, al integrar múltiples sistemas detrás de su API, GraphQL los unifica y oculta su complejidad detrás de este gráfico. El servidor de GraphQL es el encargado de obtener los datos de los sistemas existentes y empaquetarlos en el formato de respuesta de GraphQL.

Ahora echemos un vistazo a GraphQL. En este punto, GraphQL es definitivamente popular. AWS, Netflix, Twitter, Peloton, Reddit, Twilio, GitLab, Twitch, PayPal, Spotify. Quiero decir, nombralo, la mayoría de las empresas grandes en estos días lo están utilizando para cosas críticas o al menos en algún lugar. Estamos viendo una adopción más amplia. Ya es algo común.

Algo que realmente me interesa es el sentimiento de los desarrolladores. Supongo que el sentimiento de los desarrolladores es importante para mí, ya que me ayuda a comprender qué seguirá siendo relevante y qué eventualmente desaparecerá. Al final del día, si a los desarrolladores les gusta hacer o usar algo en particular, es más probable que no solo se mantenga, sino que también mejore. A medida que las herramientas mejoran, más personas se unen al ecosistema y se reciben más comentarios para mejorar lo que se está construyendo. El sentimiento de los desarrolladores hacia GraphQL es muy alto en general, según las diferentes encuestas que he visto. Estas encuestas no cuentan toda la historia, pero me indican que a los desarrolladores les gusta usar GraphQL, y eso me dice mucho. Me importa lo que los desarrolladores valoran porque me interesa comprender hacia dónde se dirige la industria, para poder seguir la misma dirección. Es una preferencia personal, ya que todos somos diferentes, ¿verdad? Haz lo que funcione para ti. Pero para mí, lo que ha funcionado es dirigirme hacia una dirección en la que sé que si invierto tiempo en aprender y hacer algo, podré aprovecharlo en el futuro, ya sea consiguiendo un trabajo que utilice esas habilidades o haciendo consultorías o lo que sea. Tal vez escriba un libro.

Dicho esto, lo que realmente trata esta charla es la idea de usar GraphQL como una puerta de enlace de API. Hablaré sobre esto de varias formas antes de llegar a Cloud. Hablaré un poco más sobre microservicios. Hablaré sobre un caso de uso interesante relacionado con APIs de terceros, y también quiero hablar sobre Blockchain y Ethereum. Esto tiene algo que ver con el trabajo que tengo actualmente. Hablemos sobre microservicios. Puedes pensar en las arquitecturas de microservicios de varias formas. Una implementación muy básica podría ser tomar varios puntos finales que tienes y hacerlos accesibles dentro de tu aplicación, y estás llamando a este único punto final en AWS. Tal vez este punto final esté configurado en DigitalOcean o en otros servicios, pero todos son diferentes microservicios y tienen diferentes puntos finales y diferentes APIs. Esto no suele ser la forma correcta de hacerlo, porque terminas con una experiencia del desarrollador del lado del cliente muy inconsistente y no entiendes cómo se hace nada porque todo se hace de manera un poco diferente.

4. API Gateway with GraphQL and Blockchain

Short description:

La puerta de enlace de API con GraphQL es una opción popular. One Graph combina múltiples servicios detrás de un único punto final de GraphQL, proporcionando una forma consistente de trabajar con diferentes APIs. Permite consultar varios servicios sin necesidad de leer extensa documentación. Otro tema interesante es blockchain y Ethereum, donde se están construyendo aplicaciones descentralizadas (DApps) para préstamos, intercambio de tokens, inversiones, financiamiento colectivo y pagos. Compound, un protocolo de mercado monetario en Ethereum, permite ganar intereses al prestar activos de criptomonedas. Sin embargo, actualmente hay limitaciones en la construcción de aplicaciones directamente sobre blockchains.

Lo que suele verse es que alguien coloca una puerta de enlace de API frente a todos estos microservicios. Se obtiene un punto final de API consistente y luego se utilizan diferentes cargas útiles, diferentes parámetros de URL, cosas así. Algunas de estas cosas se abstraen detrás de esta puerta de enlace de API y se logra una mayor consistencia. Lo que se está volviendo realmente popular en AWS y entre muchos clientes que veo que lo utilizan, pero también fuera de AWS, es simplemente implementar GraphQL como tu puerta de enlace de API. Al hacer esto, obtienes todos los beneficios típicos que obtendrías de una puerta de enlace de API REST tradicional, pero con todos los diferentes beneficios que ofrece GraphQL. Definitivamente, la verificación de tipos en tiempo real que se obtiene de cualquier mutación, lo cual es realmente impresionante, la eficiencia de las consultas, la documentación de la API, todas las cosas de las que ya hemos hablado.

Ahora, eso está bien y todo, la gente lo está haciendo. Hablemos de casos de uso más interesantes. Uno de ellos es lo que Sean Grove está haciendo en One Graph con APIs de terceros. One Graph es realmente genial porque reúne varios servicios detrás de un único punto final de GraphQL, un montón de APIs diferentes que tradicionalmente eran APIs REST. Algunas de ellas también podrían ser APIs de GraphQL, pero la idea es que tienes este único gráfico con el que puedes trabajar. Lo que eso significa para mí como desarrollador, si alguna vez has trabajado con algo como la API de Twitter o la API de YouTube o Netlify, Salesforce, Air Table, cualquiera de estas APIs, todas se implementan de manera un poco diferente, ¿verdad? Pero ¿qué pasaría si hubiera una forma única de hacer esto? ¿Qué pasaría si cada empresa estuviera implementando su capa de API de la misma manera? Bueno, eso es más o menos lo que hace One Graph, y eso es lo que ahora puedes hacer con One Graph. Así que puedes consultar APIs como Air Table, Salesforce, CloudFlare, Dev.to, Dribbble, Dropbox, MailChimp, Google, YouTube, Twitter, Trello, Stripe, todo tipo de servicios. Creo que hay docenas de servicios a los que puedes consultar desde este único gráfico. Es realmente interesante. Realmente te recomiendo que lo pruebes porque, como desarrollador, ahora puedo sumergirme en este gráfico y tener éxito de inmediato sin tener que leer ninguna documentación, y cualquier documentación que necesite está ahí mismo con esa introspección de esquema de GraphQL que mencioné antes. Es autoexplicativo. Es muy bueno. Echa un vistazo a One Graph. Me gusta mucho la idea de hacer esto, y creo que puede haber incluso un par de personas más haciendo cosas similares con estas APIs de terceros.

Lo siguiente de lo que quiero hablar es blockchain y Ethereum. Dentro de este espacio, dentro del espacio de finanzas descentralizadas y la Web 3, tienes esta idea de aplicaciones descentralizadas o lo que se conocen como DApps. Con todo este ecosistema, hay todo tipo de aplicaciones diferentes que están surgiendo, construidas de esta manera utilizando estas tecnologías, supongo que podrías decir. Cosas relacionadas con préstamos, intercambio de tokens, es decir, cambiar moneda entre sí, inversiones, financiamiento colectivo, pagos, todo tipo de cosas. Es un espacio realmente interesante, algo que me ha interesado mucho. Echemos un vistazo a uno de estos, Compound. Compound es un protocolo de mercado monetario construido con Ethereum. Permite a cualquier persona o incluso a cualquier máquina ganar fácilmente intereses al prestar sus activos de criptomonedas. Los activos prestados luego se pueden utilizar como garantía para pedir prestados otros activos bloqueados en el protocolo. Por el momento, no se pueden construir aplicaciones excelentes directamente sobre blockchains.

5. Efficient Indexing and Cloud Integration

Short description:

El problema con la recuperación de datos en la web y en blockchain es la falta de indexación y organización eficientes. El gráfico resuelve esto al ofrecer un protocolo de indexación consistente utilizando GraphQL. Empresas como Compound, Uniswap y Foundation están utilizando el gráfico para acceder fácilmente a los datos. Aprender GraphQL te permite consultar datos de blockchain y trabajar con servicios en la nube como AWS.

El problema es que necesitas tener los data indexados y organizados para una recuperación eficiente. Así que piensa en la web y en lo que podrías necesitar hacer si no existiera algo como un motor de búsqueda. ¿Cómo encontrarías todos estos data? Probablemente tendrías que hacer mucho trabajo. De manera similar con los datos de blockchain, si quieres obtener data de la blockchain, lleva mucho tiempo, mucho trabajo y mucho esfuerzo. Y la mayoría de las personas, la mayoría de las empresas terminan indexándolo en su propio servidor, lo cual rompe la idea de descentralización.

Entonces, con blockchain, esta capa de indexación, ese es tradicionalmente el trabajo que hacen las bases de datos en esta pila tecnológica descentralizada. Pero esa capa de indexación faltaba en la pila de Web3. Y ahí es donde entra en juego el gráfico. El gráfico es un protocolo de indexación para consultar redes, como Ethereum, IPFS y en el futuro otras blockchains. Entonces, con el gráfico, cualquiera puede construir y publicar estas API abiertas llamadas subgrafos, haciendo que los datos sean fácilmente accesibles en forma de una API de GraphQL. Antes, los equipos del gráfico tenían que desarrollar y operar servidores de indexación propietarios ellos mismos, lo cual no solo requiere recursos de ingeniería y hardware significativos, sino que también rompe esta importante propiedad de seguridad, o todas las propiedades de seguridad necesarias para la descentralización.

Y el gráfico resuelve ese problema al ofrecer este protocolo de indexación consistente. Y lo hace utilizando GraphQL. Ahora cualquiera puede construir y publicar estas API abiertas llamadas subgrafos utilizando estos datos más fácilmente accesibles. Muchas empresas están utilizando el gráfico ahora. Muchas empresas diferentes que son muy, muy populares tienen una gran escala, supongo que podrías decir en este punto. Así que Compound, Uniswap, muchas de esas plataformas NFT están utilizando eso, incluyendo Foundation, que es una plataforma NFT bastante genial para comprar NFT y arte y cosas así. Así que esta es otra aplicación de GraphQL. Si aprendes GraphQL, no solo puedes acceder a todas estas otras API que estaba mirando con OneGraph, además de todo lo que podrías estar haciendo en tu trabajo diario, ahora puedes también consultar datos de blockchain, lo cual me parece muy interesante. Además de eso, ¿qué hay de la nube? Esto es realmente de lo que estoy aquí para hablar. Como desarrollador front-end, comencé en AWS y miré la consola de administración de AWS y me intimidé mucho. Incluso como alguien que ha estado trabajando en AWS durante más de tres años, todavía me intimida este panel de control. Lo que realmente me gustaría hacer, quiero crear un esquema como lo haría con mis API típicas de GraphQL. Quiero poder definir los data con los que me gustaría trabajar. Entonces, en este caso, tomemos un ejemplo básico nuevamente, vamos a ver un tipo de producto y un tipo de etiqueta. Y quiero tener un par de operaciones que interactúen con alguna capa de data que traiga esta información. Entonces, tal vez quiera acceder a un tipo de base de datos para la consulta de productos.

6. Building Cloud APIs with AWS

Short description:

Quiero acceder a un tipo diferente de base de datos y a un servicio de aprendizaje automático dentro de AWS. No estoy seguro de cómo juntarlo todo y combinar múltiples fuentes de datos en una sola consulta. AWS ofrece dos formas principales de construir APIs en la nube: API Gateway y AWS AppSync. En ambos casos, es necesario comprender el entorno de ejecución, los permisos y los SDK para interactuar con las fuentes de datos. Hay dos tipos de entornos de ejecución: con servidor y sin servidor. Los entornos con servidor brindan un control total pero requieren más trabajo de gestión e implementación.

Quiero acceder a un tipo diferente de base de datos para la consulta de productos. Y quiero acceder a un servicio de aprendizaje automático incluso para mi consulta de detección de etiquetas en imágenes. Entonces, ¿cómo puedo hacer que algo como esto funcione dentro de AWS, verdad? Esa es más o menos la pregunta que quiero responder. Me gusta usar GraphQL, pero no sé cómo juntar todas estas cosas. Incluso tal vez quiera hacer algo más complicado donde tengo esta consulta de obtener información de cuenta donde combinamos múltiples tipos diferentes de fuentes de datos, bases de datos, y todo se devuelve en una sola consulta. Al igual que lo que normalmente harías con GraphQL, ¿cómo lo vamos a hacer en AWS, aprovechando muchos de estos diferentes servicios y cosas de AWS?

Estamos hablando de construir APIs en la nube en este punto. ¿Cómo construyes APIs en la nube? Hay dos formas principales de hacerlo con algo como AWS. Está el servicio de API Gateway, que es un servicio de API REST, y luego está AWS AppSync, que es un servicio de GraphQL administrado. Voy a hablar un poco sobre ambos. Y dentro de ambos, hay tres piezas principales, en mi opinión, que necesitas comprender cómo funcionan. Uno es el entorno de ejecución. El entorno de ejecución es donde realmente se ejecuta tu código. Esto puede ser un servidor o puede ser una función sin servidor. Y luego tienes tus permisos. ¿Cómo hago que mi código de función se comunique con esta base de datos? ¿Y cómo hago que funcione? ¿Cómo lo configuro? Y finalmente, ¿cuáles son los diferentes SDK que necesito para interactuar con estas fuentes de datos? Entonces, estoy en esta función, estoy escribiendo TypeScript. Quiero interactuar con esta base de datos. ¿Cómo lo hago en realidad? Esas son las tres cosas que quiero desglosar aquí.

En cuanto al entorno de ejecución, hay dos tipos principales de entornos de ejecución. Tienes el entorno con servidor, lo que significa que se ejecuta en un servidor que tú mantienes. Y luego tienes el sin servidor, lo que significa que estás trabajando en una función sin servidor. Y en el entorno con servidor, tienes beneficios. Hay compensaciones en todo, ¿verdad? Cuando administras tu propio servidor, tienes control total sobre todo, lo que significa que tienes todo el entorno de ejecución. No hay limitaciones aparte del sistema en el que se ejecuta tu servidor, podrías pensar, ¿verdad? Lo cual es bueno y malo, porque también tienes más cosas que debes tener en cuenta. Y las desventajas son que tienes que hacer todo esto y escribirlo tú mismo. Entonces, tienes que implementar las suscripciones tú mismo. Tienes que comprender cómo escalar estas suscripciones. Tienes que comprender cómo escalar tu API en general. Es posible que tengas que implementar el almacenamiento en caché. También tienes que lidiar con los servidores mismos, y con todas las cosas relacionadas con la seguridad, autenticación, autorización.

7. Benefits and Downsides of Serverless with AppSync

Short description:

Cuando usas serverless, tienes menos control pero también menos trabajo. AppSync proporciona seguridad integrada, escalabilidad, resistencia y un modelo de pago sin servidor. Sin embargo, estás limitado por el servicio de API proporcionado y las tareas de larga duración no son adecuadas para serverless. Recomiendo encarecidamente AppSync para un entorno de ejecución sin servidor.

Y tienes que pensar en todas las cosas específicas de GraphQL, como las consultas maliciosas. Así que todas estas cosas, son cosas que tienes que implementar tú mismo. Así que nuevamente, hay compensaciones.

Luego vamos a hablar de, hemos hablado de server full. Hablemos de serverless. Así que hay dos formas principales de hacer esto en AWS al menos. Una es usando AppSync, que es un servicio GraphQL administrado. Y luego está usando Amazon API Gateway en AWS Lambda, que no está realmente diseñado para GraphQL. Así que me voy a centrar en AppSync. Y este es un servicio del que soy un gran fan. Si has visto mi canal de YouTube, ya no trabajo en AWS, pero sigue siendo mi servicio en la nube favorito para trabajar y lo será. AppSync es un servicio de API GraphQL administrado. Definitivamente recomiendo echarle un vistazo. Pero todo de lo que voy a hablar va a ser utilizando AppSync.

Entonces, ¿cuáles son algunos de los beneficios de usar serverless? Los beneficios de serverful, hemos hablado de que tienes el control del entorno de ejecución, pero tienes que hacer mucho más trabajo. Creo que serverless cambia eso en cierto sentido, haces menos trabajo, pero también tienes menos control sobre las cosas que actualmente no son compatibles. Por ejemplo, al trabajar con AppSync, tienes seguridad integrada, autenticación y autorización. Tienes suscripciones integradas que pueden escalar hasta decenas de millones de clientes conectados, escalabilidad, resistencia, todo esto se tiene en cuenta. El almacenamiento en caché está integrado. No tienes que administrar tus servidores. Tienes menos código con el que lidiar y estás utilizando un modelo de pago sin servidor. En lugar de pagar por un gasto de capital, un gasto constante, lo estás intercambiando por un gasto variable, lo que significa que estás pagando por el cómputo que se está utilizando. Si está inactivo, no se te cobra.

Entonces, ¿cuáles son las desventajas de usar algo como AppSync? Estás limitado por el servicio de API que se te proporciona. Si AppSync no ofrece algo que necesitas, estás un poco fuera de suerte. Si conoces tu consistencia de alta escala, de manera constante a lo largo del tiempo, podría ser más barato administrar tus propios servidores. Creo que serverless es especialmente adecuado para entornos dinámicos donde tu tráfico sube y baja, y no estás seguro de cómo será tu tráfico en cuanto a un modelo de costos. Además, si necesitas tareas de larga duración, serverless no es un buen entorno para eso. Normalmente necesitas tu propio servidor para algo así. Mi recomendación, basada en todo lo que he hecho, todo con lo que he trabajado, soy un gran fan del entorno de ejecución sin servidor, especialmente de AppSync.

8. Permissions and SDKs in AWS Cloud

Short description:

Los permisos en AWS Cloud se gestionan mediante Identity and Access Management (IAM). IAM te permite otorgar permisos a los recursos para realizar operaciones en los servicios. Al establecer permisos utilizando IAM, puedes interactuar con bases de datos y servicios en tu entorno. Otra consideración al trabajar con entornos de ejecución es el uso de SDKs. AWS proporciona un único SDK para varios entornos de ejecución, lo que te permite importar el cliente necesario y ejecutar operaciones con solo unas pocas líneas de código. El SDK de AWS admite una amplia gama de servicios, incluidos los servicios de aprendizaje automático como reconocimiento.

Así que tómalo con precaución. Yo probaría lo que quieras tú mismo antes de tomar cualquier decisión.

Lo siguiente son los permisos. Ahora que entendemos que queremos usar esta o aquella implementación de servidor o serverless, ¿cómo vamos a lidiar con cosas como los permisos? En AWS, en Cloud, tienes esta idea típica de IAM, que significa Identity and Access Management. Identity Access Management suena más complicado, creo, de lo que es. Así que veamos qué significa realmente.

Digamos que he creado un entorno, he creado esta función lambda donde puedo escribir algo de Typescript. Tengo esta tabla DynamoDB y quiero hacer una llamada a la API, o quiero hacer una consulta a la base de datos, supongo que podrías decir, desde mi función a esta tabla base de datos. Ahora, de forma predeterminada, tienes acceso restringido. Por defecto, se te da el acceso denegado en la mayoría de los entornos de Cloud. Lo que significa que si intento acceder a algo y no le he dado estos permisos, entonces, por defecto, va a decir que no puedes hacer eso.

Todo lo que IAM está diciendo, es que voy a darle a este recurso permiso para realizar estas diferentes operaciones en este servicio. Podría decir que quiero que mi función lambda pueda crear, actualizar, eliminar y leer de esta tabla. Una vez que se establece ese permiso utilizando IAM, ahora puedo empezar a interactuar con esta base de datos. Vamos a ver cómo se ve esto en el código en solo un segundo.

Luego, lo último que debes tener en cuenta, si estás trabajando con uno de estos entornos de ejecución, son los SDKs. Lo bueno de esta idea de los SDKs es que solo hay un SDK principal con el que tienes que lidiar en el servidor. Ahora, si estás trabajando con AppSync, puedes hablar directamente con alguna base de datos como DynamoDB, Elasticsearch o Serverless Aurora, o puedes mapear tus operaciones en este entorno de ejecución como Lambda y hablar con cualquiera de los servicios que desees. Puedes ejecutar Node.js, puedes ejecutar Python, puedes ejecutar Go. Todos estos diferentes entornos de ejecución tienen un SDK de AWS que admite todos los demás servicios. Todo lo que necesitarías hacer sería importar el SDK de AWS y Node.js, y puedes hacer algo como esto.

Si quieres hablar con DynamoDB, adelante e importa el cliente de DynamoDB y crea nuestro comando diciendo que queremos hacer algo como escanear, en este caso, el comando de escaneo. Luego, en cuatro líneas de código, incluidas las importaciones, sin incluir el controlador, podemos escanear esta tabla y obtener todos los datos que queremos de la tabla. Hay cientos de servicios con los que puedes trabajar desde este SDK de AWS, un proyecto bastante masivo. Digamos que quieres trabajar con el servicio de aprendizaje automático como reconocimiento. Todo lo que necesitas hacer es importar el SDK de AWS. Vamos a importar el cliente de reconocimiento y el comando de detección de etiquetas. Construimos nuestro comando, pasando los parámetros. En este caso, queremos especificar el bucket de S3 y la imagen de la que queremos detectar etiquetas. Luego ejecutamos la operación y tenemos esos datos de retorno, que están en formato JSON en este ejemplo.

9. Deploying GraphQL APIs with Amplify and CDK

Short description:

Hablemos de implementar APIs de GraphQL utilizando herramientas como Amplify y CDK. Con Amplify, agregar una API de GraphQL es tan simple como ejecutar Amplify add API. La CLI de Amplify se encarga de todo el código de infraestructura y la configuración por ti, lo que te permite centrarte en tu esquema y directivas de GraphQL. Por otro lado, CDK proporciona una forma de crear un nuevo proyecto ejecutando CDK init. Esto configurará todo lo que necesitas y creará un stack para que puedas comenzar a escribir código.

Dicho esto, todavía estoy confundido porque ¿cómo realmente juntamos todas estas cosas? Tal vez entendamos que necesitas todas estas cosas, pero juntarlas sigue siendo muy, muy difícil en mi cabeza en este momento. Hablemos de hacer esto un poco más fácil uniendo todas estas cosas y desplegando algo. Aquí es donde entran en juego muchas de lastooling y cosas en las que hemos estado trabajando cuando estaba en AWS para facilitar esto. Hay un par de opciones de implementación. Por supuesto, puedes ir directamente al panel de AWS y hacer todo esto, pero eso para mí es más complicado que usar algunas de estas herramientas que existen. En particular, con AppSync, AWS CDK, AWS SAM, AWS Amplify, y el framework serverless son, en mi opinión, algunas de las más fáciles de usar. También puedes usar CloudFormation, que es muy robusto, pero también es una forma muy detallada de hacer esto. Recomendaría usar Amplify, el framework serverless, o tal vez CDK si estás comenzando. Voy a hablar sobre Amplify y CDK para darte una visión general de dos formas diferentes de hacer esto.

Con Amplify, si quieres agregar una API deGraphQL, simplemente ejecutas Amplify add API. En realidad, no tienes que configurar todos estos diferentes servicios. No tienes que lidiar con los permisos. La CLI de Amplify escribirá todo el código de infraestructura por ti y lo conectará todo. A partir de ahí, todo lo que necesitas hacer es lidiar con tu esquema deGraphQL, y en tu esquema, puedes usar estas directivas que forman parte de lo que se llama la biblioteca de transformación deGraphQL para modelar y lidiar con muchas de estas otras cosas por ti también. Entonces, digamos que queremos tener una base de datos de publicaciones en una tabla de DynamoDB. Todo lo que necesitamos agregar es esta directivaat model, y ahora tendremos nuestra tabla que se crea, así como todos los resolvers que necesitaremos para las operaciones CRUD, las operaciones de lista y las suscripciones. A partir de ahí, podemos modificar nuestro código del resolver si queremos. También podemos modelar reglas de autorización. Entonces, en este caso, tengo esta directivaat auth rules que dará permisos de propietario al elemento que se crea. Y hay todo tipo de reglas diferentes que puedes establecer aquí. De hecho, creo que hay siete directivas de nivelrate que también puedes usar para hacer otras cosas como modelar relaciones entre datos. También podemos decir, oh, quiero asignar una consulta o mutación deGraphQL a una función deLambda. Y luego, dentro de esta función, tenemos todo el entorno de ejecución completo. Ahora, todo lo que tienes que hacer es agregar esta directivaat function y la biblioteca de transformación deGraphQL conectará todo por ti utilizando la CLI de Amplify. Así que siempre que tengamos esta función creada, ahora podemos ir a esta función, escribir toda la lógica empresarial que necesitamos y devolver una matriz de imágenes. Siempre y cuando vuelva en la estructura definida en nuestro esquema, entonces estamos listos. Es muy poderoso usar la directivaat function. Soy un gran fan de eso.

Veamos un poco de código real y en el código vamos a ver un CDK. Entonces, con CDK, es posible que desees crear un nuevo proyecto para hacer esto, simplemente ejecutas CDK init, esto configurará todo lo que necesitas y creará un stack para que puedas comenzar a escribir código.

10. Creating a GraphQL API with Lambda and DynamoDB

Short description:

Ahora creemos una API de GraphQL respaldada por una función Lambda y una tabla DynamoDB. Importamos la biblioteca de AppSync y configuramos parámetros como el nombre, la ubicación del esquema y el tipo de autorización base. Definimos una fuente de datos creando una función Lambda y mapeando las operaciones de GraphQL en ella. Por último, mapeamos las operaciones de nuestra API en Lambda utilizando resolvers. Para obtener más información, visita mi canal de YouTube, GitHub, el blog móvil de AWS y la documentación de Amplify. Este es el futuro de la implementación de API en la nube.

Ahora veamos cómo podríamos crear una API de GraphQL respaldada por una función Lambda y una tabla DynamoDB. Diremos, hey, queremos crear una nueva API. Entonces importamos la biblioteca de AppSync y llamamos a AppSync.GraphQLAPI. Ahora podemos configurar varios parámetros como el nombre, la ubicación del esquema y cualquier cosa adicional como nuestro tipo de autorización base. En este caso, queremos una API pública con una clave de API. Esto desplegará nuestra API. Podemos ejecutar este código por sí solo y ahora tenemos nuestra API.

Sin embargo, la API no hará nada porque no tenemos una, no hemos definido dónde deben mapearse nuestros resolvers y no hemos definido una fuente de datos. Así que a continuación podríamos definir nuestra fuente de datos. Podríamos decir que queremos tener una función Lambda como fuente de datos, lo que significa que vamos a mapear nuestras operaciones de GraphQL en la Lambda. Pero para hacer eso, primero debemos crear nuestra función Lambda. Así que lo estamos haciendo aquí. Estamos configurando el runtime a node.js. Estamos definiendo el tamaño de memoria y estamos definiendo la ubicación del código para el código que vamos a ejecutar. Y finalmente, ahora tenemos nuestro esquema. Tenemos nuestra API y tenemos nuestra función Lambda y tenemos nuestra fuente de datos.

Ahora podemos comenzar a mapear operaciones que hemos definido en nuestro esquema en esta fuente de datos. Todo lo que tenemos que hacer es decir create resolver. Establecemos el nombre del tipo y el nombre del campo. Así que en este caso estamos diciendo, queremos una consulta de listar publicaciones, una mutación de crear publicaciones, y una consulta de buscar imágenes. Y ahora estamos mapeando estas operaciones de la API en Lambda. Dicho esto, diría que si quieres aprender más sobre cómo hacer esto, visita mi canal de YouTube. Tengo muchos videos sobre cómo construir este tipo de arquitectura. youtube.com/natterdabit. También te recomendaría que veas mi GitHub, github.com/dabit3. Consulta el blog móvil de AWS, la documentación de Amplify. Realmente creo que este es el futuro de la implementación de API en la nube. Veremos mucha más adopción. Soy un gran fan de esto. Si no te has dado cuenta, realmente me importa este tema.

QnA

Excitement, Introductions, and Audience Questions

Short description:

Estoy realmente emocionado por esto. Gracias por revisar mi charla. Soy natterdabit, trabajo en DevRel en Edge and Node. Este es un gran evento con cosas increíbles, charlas geniales y masterclasses. Gracias a todos los organizadores. ¿Cómo te presentas en las fiestas? Me presento como Catalyn o Unicorn Dev. La encuesta State of JS tuvo respuestas interesantes y los desarrolladores full-stack están en aumento. Me sorprendió la cantidad de desarrolladores full-stack aquí. Ahora, pasemos a las preguntas del público. John B preguntó por fuentes recomendadas sobre GraphQL y la charla. Escribí una publicación en el blog con el mismo título que esta charla.

Estoy realmente emocionado por esto. Sí, gracias por revisar mi charla. Una vez más, soy natterdabit. Trabajo en DevRel en Edge and Node. Echa un vistazo a Edge and Node. Es mi nueva empresa. Estoy muy emocionado por eso también. Y muchas gracias por revisar mi charla. Nos vemos por aquí.

Estoy realmente, realmente feliz de estar aquí y este es un gran evento. Quiero decir, esto es simplemente increíble, como si simplemente... Es difícil expresarlo con palabras cuántas cosas increíbles han sucedido durante todo esto, entre las panel discussions, todas las charlas geniales, las masterclasses. Realmente buen trabajo de todos los organizadores. Eso es todo lo que tengo que decir porque sé que esto debe ser mucho trabajo. Sí, muchas gracias. Sí, es una conferencia muy agradable, eso seguro. Es la primera vez que la veo. Espero hacerlo en el futuro, nunca se sabe, pero es muy agradable ver, como todos están haciendo mucho trabajo y, por supuesto, invitando a oradores realmente geniales como tú.

Entonces, hiciste la pregunta en primer lugar, ¿y cómo te presentas en las fiestas? Puedo responder eso, me presento como Catalyn o Unicorn Dev, pero dejaste un par de puntos allí, como desarrollador web, parece que está ganando con un 51%. ¿Qué opinas al respecto? Sí, eso es bastante genial. Como, esta fue una pregunta que se hizo en la encuesta State of JS que pensé que tenía algunas respuestas interesantes, pero creo que está muy enfocado en el front-end, al igual que este evento. Pero me preguntaba cómo se distribuye entre los desarrolladores de front-end y los desarrolladores full-stack que vienen a este tipo de eventos, pero también quién quiere ingresar al front-end que podría venir aquí, y luego alguien que es más como un programador, pero más en el nivel C. Entonces, eso típicamente sería como un CTO. Así que pensé que era una buena variedad de preguntas. Pero realmente me sorprendió ver cuántos desarrolladores full-stack hay aquí, pero creo que esa tendencia está aumentando con todo este serverless full-stack y cloud full-stack y Vercel y todas estas otras cosas que están surgiendo que permiten a los desarrolladores involucrarse en el full-stack. Gran parte de las cosas en las que realmente me he enfocado en mi career, también en los últimos años se orienta hacia eso también. Así que eso es bueno, resultados interesantes. Bien.

Así que tenemos algunas preguntas del público. Comenzaré con la pregunta dirigida por John B, ¿tienes alguna fuente recomendada para obtener más información sobre estos temas? Tal vez GraphQL o la charla que diste? Sí, quiero decir, lo que fácilmente puedo mostrarte y enseñarte es que escribí una publicación en el blog que se llama exactamente igual que esta charla.

Turning the Cloud Inside Out

Short description:

Turning the Cloud Inside Out es el resultado de los últimos años en el ecosistema de GraphQL. Para obtener más información, lee sobre GraphQL desde un nivel teórico y sigue a Sean Grove, Yuri Goldstein y Eve Pursello. Se nos está acabando el tiempo, pero fue un placer tener a Nadir aquí. Espero que podamos volver a encontrarnos después de la pandemia.

Se llama Turning the Cloud Inside Out. Así que permíteme pegar el enlace allí en el discord. Pero, quiero decir, realmente esto es una culminación de todo lo que ha sucedido en el ecosistema en los últimos años. Así que cualquier cosa que se haya escrito sobre GraphQL desde un nivel teórico probablemente sería bueno leerlo también.

Si quieres seguir a algunas personas interesantes, hay un montón de personas, pero tal vez las personas que están en este espacio son Sean Grove de OneGraph, lo mencioné en la charla. Siempre está haciendo cosas realmente innovadoras. Yuri Goldstein también está haciendo cosas realmente interesantes que están relacionadas con el tooling de GraphQL. Eve Pursello es como, con mucho, la mejor profesora en el espacio, tal vez porque ha escrito libros, tiene un curso muy completo que se lanzará, muchas cosas interesantes. Así que si sigues a esas tres personas y ves parte del trabajo que han hecho, aprenderás mucho sobre GraphQL.

Genial, no estoy seguro si se nos está acabando el tiempo. ¿Tenemos alguno? Bien, así que se nos está acabando el tiempo. Nadir, fue un placer, realmente te extraño. Espero que esta pandemia termine y podamos volver a encontrarnos, tomando algo y simplemente discutiendo en general. Muchas gracias por tu charla. Fue un placer tenerte aquí. Gracias. Sí, es un honor estar aquí, gracias.

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

React Advanced Conference 2021React Advanced Conference 2021
39 min
Don't Solve Problems, Eliminate Them
Top Content
Humans are natural problem solvers and we're good enough at it that we've survived over the centuries and become the dominant species of the planet. Because we're so good at it, we sometimes become problem seekers too–looking for problems we can solve. Those who most successfully accomplish their goals are the problem eliminators. Let's talk about the distinction between solving and eliminating problems with examples from inside and outside the coding world.
GraphQL Galaxy 2021GraphQL Galaxy 2021
32 min
From GraphQL Zero to GraphQL Hero with RedwoodJS
Top Content
We all love GraphQL, but it can be daunting to get a server up and running and keep your code organized, maintainable, and testable over the long term. No more! Come watch as I go from an empty directory to a fully fledged GraphQL API in minutes flat. Plus, see how easy it is to use and create directives to clean up your code even more. You're gonna love GraphQL even more once you make things Redwood Easy!
Vue.js London Live 2021Vue.js London Live 2021
24 min
Local State and Server Cache: Finding a Balance
Top Content
How many times did you implement the same flow in your application: check, if data is already fetched from the server, if yes - render the data, if not - fetch this data and then render it? I think I've done it more than ten times myself and I've seen the question about this flow more than fifty times. Unfortunately, our go-to state management library, Vuex, doesn't provide any solution for this.For GraphQL-based application, there was an alternative to use Apollo client that provided tools for working with the cache. But what if you use REST? Luckily, now we have a Vue alternative to a react-query library that provides a nice solution for working with server cache. In this talk, I will explain the distinction between local application state and local server cache and do some live coding to show how to work with the latter.
React Day Berlin 2022React Day Berlin 2022
22 min
Jotai Atoms Are Just Functions
Top Content
Jotai is a state management library. We have been developing it primarily for React, but it's conceptually not tied to React. It this talk, we will see how Jotai atoms work and learn about the mental model we should have. Atoms are framework-agnostic abstraction to represent states, and they are basically just functions. Understanding the atom abstraction will help designing and implementing states in your applications with Jotai
React Summit 2023React Summit 2023
24 min
Debugging JS
Top Content
As developers, we spend much of our time debugging apps - often code we didn't even write. Sadly, few developers have ever been taught how to approach debugging - it's something most of us learn through painful experience.  The good news is you _can_ learn how to debug effectively, and there's several key techniques and tools you can use for debugging JS and React apps.
React Day Berlin 2022React Day Berlin 2022
29 min
Fighting Technical Debt With Continuous Refactoring
Top Content
Let’s face it: technical debt is inevitable and rewriting your code every 6 months is not an option. Refactoring is a complex topic that doesn't have a one-size-fits-all solution. Frontend applications are particularly sensitive because of frequent requirements and user flows changes. New abstractions, updated patterns and cleaning up those old functions - it all sounds great on paper, but it often fails in practice: todos accumulate, tickets end up rotting in the backlog and legacy code crops up in every corner of your codebase. So a process of continuous refactoring is the only weapon you have against tech debt. In the past three years, I’ve been exploring different strategies and processes for refactoring code. In this talk I will describe the key components of a framework for tackling refactoring and I will share some of the learnings accumulated along the way. Hopefully, this will help you in your quest of improving the code quality of your codebases.

Workshops on related topic

React Advanced Conference 2021React Advanced Conference 2021
174 min
React, TypeScript, and TDD
Top Content
Featured WorkshopFree
ReactJS is wildly popular and thus wildly supported. TypeScript is increasingly popular, and thus increasingly supported.

The two together? Not as much. Given that they both change quickly, it's hard to find accurate learning materials.

React+TypeScript, with JetBrains IDEs? That three-part combination is the topic of this series. We'll show a little about a lot. Meaning, the key steps to getting productive, in the IDE, for React projects using TypeScript. Along the way we'll show test-driven development and emphasize tips-and-tricks in the IDE.
React Advanced Conference 2021React Advanced Conference 2021
145 min
Web3 Workshop - Building Your First Dapp
Top Content
Featured WorkshopFree
In this workshop, you'll learn how to build your first full stack dapp on the Ethereum blockchain, reading and writing data to the network, and connecting a front end application to the contract you've deployed. By the end of the workshop, you'll understand how to set up a full stack development environment, run a local node, and interact with any smart contract using React, HardHat, and Ethers.js.
GraphQL Galaxy 2021GraphQL Galaxy 2021
140 min
Build with SvelteKit and GraphQL
Top Content
Featured WorkshopFree
Have you ever thought about building something that doesn't require a lot of boilerplate with a tiny bundle size? In this workshop, Scott Spence will go from hello world to covering routing and using endpoints in SvelteKit. You'll set up a backend GraphQL API then use GraphQL queries with SvelteKit to display the GraphQL API data. You'll build a fast secure project that uses SvelteKit's features, then deploy it as a fully static site. This course is for the Svelte curious who haven't had extensive experience with SvelteKit and want a deeper understanding of how to use it in practical applications.

Table of contents:
- Kick-off and Svelte introduction
- Initialise frontend project
- Tour of the SvelteKit skeleton project
- Configure backend project
- Query Data with GraphQL
- Fetching data to the frontend with GraphQL
- Styling
- Svelte directives
- Routing in SvelteKit
- Endpoints in SvelteKit
- Deploying to Netlify
- Navigation
- Mutations in GraphCMS
- Sending GraphQL Mutations via SvelteKit
- Q&A
React Summit 2022React Summit 2022
136 min
Remix Fundamentals
Top Content
Featured WorkshopFree
Building modern web applications is riddled with complexity And that's only if you bother to deal with the problems
Tired of wiring up onSubmit to backend APIs and making sure your client-side cache stays up-to-date? Wouldn't it be cool to be able to use the global nature of CSS to your benefit, rather than find tools or conventions to avoid or work around it? And how would you like nested layouts with intelligent and performance optimized data management that just works™?
Remix solves some of these problems, and completely eliminates the rest. You don't even have to think about server cache management or global CSS namespace clashes. It's not that Remix has APIs to avoid these problems, they simply don't exist when you're using Remix. Oh, and you don't need that huge complex graphql client when you're using Remix. They've got you covered. Ready to build faster apps faster?
At the end of this workshop, you'll know how to:- Create Remix Routes- Style Remix applications- Load data in Remix loaders- Mutate data with forms and actions
Vue.js London Live 2021Vue.js London Live 2021
169 min
Vue3: Modern Frontend App Development
Top Content
Featured WorkshopFree
The Vue3 has been released in mid-2020. Besides many improvements and optimizations, the main feature of Vue3 brings is the Composition API – a new way to write and reuse reactive code. Let's learn more about how to use Composition API efficiently.

Besides core Vue3 features we'll explain examples of how to use popular libraries with Vue3.

Table of contents:
- Introduction to Vue3
- Composition API
- Core libraries
- Vue3 ecosystem

Prerequisites:
IDE of choice (Inellij or VSC) installed
Nodejs + NPM
JSNation 2023JSNation 2023
174 min
Developing Dynamic Blogs with SvelteKit & Storyblok: A Hands-on Workshop
Featured WorkshopFree
This SvelteKit workshop explores the integration of 3rd party services, such as Storyblok, in a SvelteKit project. Participants will learn how to create a SvelteKit project, leverage Svelte components, and connect to external APIs. The workshop covers important concepts including SSR, CSR, static site generation, and deploying the application using adapters. By the end of the workshop, attendees will have a solid understanding of building SvelteKit applications with API integrations and be prepared for deployment.