Construir y Desplegar APIs GraphQL Instantáneas al Borde

Rate this content
Bookmark

Aprenda cómo generar APIs GraphQL instantáneas utilizando un conector de fuente de datos (fuentes GraphQL y no GraphQL), extenderlas y unirlas ambas con resolutores personalizados y desplegar al borde sin salir del editor de código.

Jamie Barton
Jamie Barton
55 min
10 Nov, 2023

Comments

Sign in or register to post your comment.
  • Nikhita Sareen
    Nikhita Sareen
    none
    Is anybody able to join?
  • Lucas Estevão
    Lucas Estevão
    Avenue Code
    It should start at 9 a.m. PST, I guess there was a confusion because of time changes in the US.
  • Nelly Ruehl
    Nelly Ruehl
    JPMorgan Chase
    Is this still happening? Zoom says "waiting for the host to start the meeting".

Video Summary and Transcription

En esta masterclass, exploramos GraphBase y GraphQL, centrándonos en el uso de Neon como conector y Postgres como base de datos. Aprendemos cómo configurar Neon y el conector Postgres, generar automáticamente un esquema GraphQL, y crear una API GraphQL con Neon. También profundizamos en el almacenamiento en caché en el borde, la extensión de las APIs GraphQL, y la integración con MongoDB, Contentful, y otros servicios de datos. Además, cubrimos la adición de reglas de API y seguridad con Click como proveedor de autenticación.

Available in English

1. Introducción a Graphbase y GraphQL

Short description:

En esta parte, exploraremos Graphbase y GraphQL. Discutiremos los desafíos de usar múltiples herramientas y servicios en el ecosistema y cómo GraphQL puede proporcionar una API unificada. También abordaremos el problema de la latencia de datos e introduciremos el almacenamiento en caché de borde de GraphQL. Además, nos centraremos en el uso de una base de datos Postgres con NEON como conector y demostraremos cómo implementar globalmente utilizando trabajadores de CloudFlare.

Hola a todos. Muchas gracias por tomarse el tiempo hoy para unirse a mí, y vamos a pasar algún tiempo hoy mirando Graphbase y GraphQL. Esta no es una masterclass para personas en GraphQL, pero estoy más que feliz de responder cualquier pregunta que alguien tenga allí. Entonces, hola, Natasha y todos los demás que están en el chat, es genial tenerlos a todos. Y por favor, no duden en interrumpirme en cualquier momento. El estilo que voy a adoptar hoy en realidad va a ser mostrándoles algunas cosas. Y si tienen acceso al portal GetNation, hay otras masterclass y videos allí de mí mismo sobre este mismo tema. Pero creo que hoy podemos repasar y mostrar varias partes. Y quiero hablar específicamente sobre una forma en que ustedes pueden construir APIs de GraphQL en la parte superior de una base de datos Postgres database con un nuevo conector que tenemos. Eso podría ser interesante. Y vamos a hacer un recorrido por el producto y lo que permite a los desarrolladores hacer. Y espero que eso sea suficiente para, ya saben, inspirar algunas preguntas y, ya saben, invitarlos a probarlo. Así que solo voy a pasar por algunas diapositivas para empezar, solo para establecer el escenario. Y como dije, por favor hagan cualquier pregunta, si la tienen. Pero quiero hablarles sobre GraphQL y cómo pueden hacer que sus data sean rápidos. Soy Jamie. He estado haciendo GraphQL durante unos cinco años. Tengo un sitio web, GraphQLWTF, donde lanzo videos semanales. Eso está actualmente en pausa, pero reanudaré los videos semanales en eso en este momento. Hay un gran catálogo si están interesados. Pueden seguirme en Twitter, como se llame hoy. Mi nombre de usuario es simplemente Barton al revés, que es no trab.

El mayor problema que creo que vemos hoy, o ciertamente el problema que he experimentado personalmente, es que tenemos tantas herramientas diferentes en el ecosystem, y todas estas herramientas nos permiten hacer tantas cosas geniales. Incluso mi propio sitio web tiene herramientas para enviar notificaciones por correo electrónico, por Slack, para extraer contenido de un CMS, para extraer contenido de una plataforma de gestión de activos digitales para obtener mis imágenes y videos, y ciertamente desde mi sitio web GraphQL, el contenido proviene de muchos lugares diferentes. Lo cual es genial. Utilizo estos servicios de mejor raza como los llama la industria. Pero a menudo pasamos tanto tiempo averiguando cómo funcionan cada una de estas APIs. Pasamos tanto tiempo leyendo cada documentation o referencia de SDK para realmente averiguar cómo funciona todo junto, y al final de todo tenemos un archivo json de paquete que tiene una docena o si no múltiples gigabytes de módulos de Node modules solo para instalar SDKs y lo que sea, y eso está bien. Pero no creo que sea la mejor experiencia, y creo que GraphQL realmente brilla aquí porque nos permite interactuar con todos estos servicios diferentes como una sola API. Y el otro problema que creo que tenemos es que todos estos servicios diferentes pertenecen a algún lugar, los data se almacenan en algún lugar y son accesibles. Si estoy aquí en el Reino Unido y quiero acceder a data que está en US East one o lo que sea, tengo que hacer una solicitud, obtener esos data y la latencia allí puede sumar, ¿verdad? Y esa latencia se replica para cada servicio individual que uso, lo cual tampoco es genial. Ahora, muchos de los diferentes proveedores de servicios que usamos le permiten replicar data o lo que sea, pero a menudo tiene que pagar un costo por proveedor para replicar. Entonces eso no es genial, tienes todos estos costos diferentes asociados con solo una salida porque has tenido que replicar contenido alrededor del mundo. Entonces eso no es una experiencia increíble, en Graphbase, estamos tratando de resolver eso con algo que llamamos almacenamiento en caché de borde de GraphQL. Entonces, podemos poner una capa frente a sus fuentes de data por lo que cuando alguien solicita eso, lo almacenamos en caché y los tiempos de respuesta pasan de parecer algo como esto a la línea verde. Cualquier cosa que solicites pasa mucho más rápido. Entonces, ¿cómo conectamos cosas? Bueno, estas son tres formas que quiero mostrarles y no me voy a centrar demasiado en estas hoy, la de postgres es la que me importa. Tenemos tres conectores aquí. MongoDB y un conector de API abierta. El conector de API abierta es bastante genial porque puede tomar una especificación de API abierta y puedes usar esa especificación y lo genial de las especificaciones es que siguen una especificación por lo que podemos determinar qué campos son y cuáles son los puntos finales y qué argumentos toman porque estas especificaciones siguen una especificación y el esquema sigue una especificación. Entonces, podemos crear automáticamente una API de GraphQL basada en la especificación de API abierta, lo cual es bastante genial. Y porque es GraphQL, podemos introspeccionar eso de la misma manera. Podemos introspeccionar las APIs de GraphQL y podemos generar algo que puedas usar. MongoDB, por otro lado, aquí tenemos una forma de definir modelos y especificar campos en esos modelos y agregar cierta rigidez a nuestro MongoDB, que es tradicionalmente una base de datos de documentos. Podemos agregar algunas reglas y comportamientos sobre cómo se almacenan los documentos y generamos todas las APIs para eso. Pero en lo que quiero centrarme hoy es en el uso de una base de datos Postgres database y estaremos usando NEON, así que por favor vayan a NEON dot tech y regístrense y creen su propia base de datos allí si quieren seguir. Pero aquí podemos conectar NEON como un conector, agregarlo a nuestro esquema como una fuente de data, luego podemos agregar almacenamiento en caché a eso por lo que cuando hacemos una solicitud, obtiene data de la caché y no de NEON. Luego, una vez que tenemos todas nuestras conexiones y fuentes de data alineadas, todo lo que entonces necesitamos hacer para implementar esto en el borde globalmente alrededor del mundo, con más de 200 puntos de presencia, es ejecutar un npx craftbase deploy y eso se implementará en todo el mundo, lo cual es bastante genial. Todo está construido con Rust y luego se empaqueta usando WebAssembly y se implementa en diferentes, no lambdas, sino trabajadores de CloudFlare que se implementan, como digo, alrededor del mundo en la red Edge de CloudFlare. Todo lo que voy a mostrarles y hablar hoy es

2. GraphBase, Neon y el adaptador Postgres

Short description:

Una vez que hemos desplegado todo a nivel global, necesitamos entender cómo hacer consultas. Neon proporciona un panel de control y una base de datos que nos permite formar consultas GraphQL. Podemos crear cosas con mutaciones y buscar cosas con consultas, incluyendo argumentos de paginación. pathfinder.dev es una herramienta para ejecutar consultas GraphQL. GraphBase tiene como objetivo resolver el problema de consumir datos de diferentes servicios proporcionando una API unificada de GraphQL. También ofrece despliegue automático de versiones de API cuando se realizan cambios en la base de datos. Hoy, nos centraremos en Neon y el adaptador Postgres. Exploraremos brevemente la versión alojada, pero la mayor parte de nuestro trabajo se realizará localmente. GraphBase despliega puntos finales de GraphQL en todo el mundo, utilizando almacenamiento en caché en el borde y características como KVStorage para reducir la latencia. Cada cambio en el esquema se registra, y se pueden acceder a despliegues específicos para diferentes ramas o características.

de código abierto, por favor, échenle un vistazo si están interesados. Pero una vez que tenemos todo desplegado alrededor del mundo, necesitamos averiguar cómo consultarlo, ¿cómo se ve eso? Bueno, aquí podemos ver en el fondo una captura de pantalla de Neon. Voy a profundizar en esto en unos dos o tres minutos. Y vamos a ver ese panel de control y la database y más tablas y data que tenemos. Pero esa database nos permite formar consultas GraphQL. Podemos ver en la pantalla que tenemos una mutación para crear cosas. Luego tenemos una consulta para buscar cosas. Y podemos ver que tenemos algunos argumentos de paginación aquí para buscar los primeros o últimos o cualquier nodo que queramos de la database. Y todo eso se genera automáticamente, lo cual es bastante genial. Y sí, finalmente, pathfinder.dev es una forma de ejecutar estas consultas GraphQL. Esto no sólo funciona con Graphbase, sino que funciona con cualquier API GraphQL. Es una forma de ver y realizar solicitudes GraphQL similares a GraphiQL, si lo has usado antes. Y eso es lo que tenemos en la experiencia local y las versiones desplegadas de Graphbase. Así que creo que probablemente es una buena transición para hablar sobre Graphbase muy, muy rápidamente. Dándome las razones por las que creamos Graphbase y lo que estamos buscando resolver. Pero sólo como una visión general de alto nivel, GraphQL aquí, tenemos una consulta para buscar un producto por un slug. Y la idea, las cosas que podemos hacer realmente agradables e intuitivas para ustedes como desarrolladores es, podrían tener todas sus diferentes fuentes de data, como mencioné antes, repartidas en diferentes servicios. Y si quieren crear una consulta para cumplir con este requisito de tarjeta aquí, podemos obtener la imagen, el título, el precio, las variantes, lo que sea, de todos los diferentes servicios que están gestionando eso. Así que nos han dicho en los últimos años que es importante que tengamos diferentes servicios para hacer sus propias cosas individuales. Pero en realidad, consumir todo eso es en realidad un problema que creamos por eso. Y GraphQL es una forma realmente genial de resolver eso. Así que, sí, lo que GraphBase hará es, nos dará una API para llamar a esta consulta GraphQL. Desplegaremos eso. Siempre que crees una solicitud de extracción en tu trabajo y hagas cualquier cambio en tu database, desplegaremos una versión diferente de eso también, lo cual es genial. Genial. Así que, sí. Hola, y bienvenidos a todos los que se acaban de unir. Es genial tenerlos a todos aquí. Y como dije, por favor avísenme si tienen alguna pregunta. Así que, ahora hemos establecido la escena. Hemos hablado de los problemas y problemas que tenemos y por qué creamos un GraphBase. Para cualquiera que se acabe de unir, estamos buscando resolver estos dos cosas aquí. Muchas fuentes de data diferentes con una curva de aprendizaje diferente para cada herramienta que usamos y el problema de que todas estas cosas están desplegadas en todo el mundo y cuesta tanto porque tenemos que replicar eso para cada servicio individual. Creemos que podemos reunir todo eso bajo una API GraphQL. Y hoy, quiero pasar algún tiempo hablando sobre Neon y el adaptador Postgres que acabamos de crear. Así que, Graphis, cuando te conectas, si vas allí ahora y empiezas a crear cuentas, me conectaré a la mía y te mostraré brevemente cómo se ve la versión alojada. Pero todo lo que vamos a hacer hoy es básicamente algo en lo que trabajaremos localmente. Así que aquí, tenemos algunos proyectos diferentes. Si sólo voy a este proyecto aquí, podemos ver aquí, este es nuestro panel de control, tenemos nuestros puntos finales GraphQL. Y estos son los puntos finales que le decimos a Netlify, Versaille, Fly, donde sea que despliegues esto, este es mi punto final GraphQL. Y ese punto final está distribuido alrededor del mundo, desplegado en el borde, y tiene todo eso como almacenamiento en caché en el borde construido junto a él. Tenemos cosas como KVStorage, a las que puedes acceder todo en el borde también. La idea es reducir esa latencia tanto como podamos. Así que este es un proyecto que recibe bastante golpes de alguna herramienta que compara diferentes despliegues en el borde, pero es lo suficientemente bueno para mostrarte alrededor. Así que aquí tenemos todos los despliegues que cada vez que haces un cambio en el esquema, el esquema es algo que te mostraré en breve, pero cada cambio que haces, puedes entrar y ver, añadí esto, eliminé esto, añadí este campo, añadí este conector. Puedes ver exactamente lo que pasó y los registros de construcción para eso también. Y puedes ver exactamente quién hizo eso. Tienes acceso a los puntos finales individuales para ese despliegue específico también. Así que si creas una rama para añadir una nueva característica o lo que sea, obtienes un despliegue específico para esa API GraphQL. Y eso es un dolor que como configurar eso