Poner el Gráfico en GraphQL con la Biblioteca Neo4j GraphQL

Rate this content
Bookmark

GraphQL expone los datos de la aplicación como un gráfico, lo cual puede presentar desafíos si su backend no está preparado para gráficos (piense en JOINs lentos como resultado de consultas GraphQL anidadas y el temido problema de la consulta n+1). La biblioteca Neo4j GraphQL permite a los desarrolladores construir APIs de GraphQL respaldadas por una base de datos de gráficos nativa utilizando solo definiciones de tipos GraphQL. En esta charla veremos cómo construir una API de GraphQL sin escribir ningún resolvedor, agregar lógica personalizada y desplegar en la nube.

23 min
09 Dec, 2021

Video Summary and Transcription

La charla discute cómo poner el gráfico en GraphQL con la Biblioteca Neo4j GraphQL. Explora la construcción de APIs de GraphQL respaldadas por una base de datos de gráficos y la comparación entre Cypher y GraphQL. La biblioteca Neo4j GraphQL proporciona funciones poderosas como funcionalidad CRUD, autorización y paginación. También cubre temas como la integración de bases de datos, contratación para el equipo de GraphQL y despliegue de una API de GraphQL con la biblioteca Neo4j GraphQL.

Available in English

1. Introducción a GraphQL y Neo4j

Short description:

La charla trata sobre cómo poner el grafo en GraphQL con la biblioteca Neo4j GraphQL. Will, que trabaja para Neo4j, se presenta y menciona su presencia en línea en Twitter y su sitio personal. También menciona que es el anfitrión del podcast graphstuff.fm.

Hola a todos. El título de esta charla es Poner el Grafo en GraphQL con la biblioteca Neo4j GraphQL. Pueden encontrar las diapositivas en dev.neo4j.com slash GraphQL dash galaxy. Mi nombre es Will. Trabajo para una empresa llamada Neo4j, que es una base de datos de grafo. Hablaremos de qué es eso en un momento. La mejor manera de contactarme en línea es probablemente a través de Twitter, donde he dejado el enlace junto con mi sitio personal que incluye un blog y un boletín que publico. También soy el anfitrión del podcast graphstuff.fm. Así que si les gustan los podcasts y la tecnología de grafo, definitivamente revisen graphstuff.fm.

2. Introducción a Neo4j y Bases de Datos de Grafo

Short description:

Neo4j es una base de datos de grafo que utiliza un lenguaje de consulta llamado Cypher. Discutiremos la construcción de APIs de GraphQL respaldadas por una base de datos de grafo y la parte de grafo de GraphQL. Un grafo es una estructura de datos donde los nodos y las relaciones conectan los nodos. Utilizamos un modelo de datos llamado grafo de propiedades para trabajar con datos en el grafo. Los grafos de conocimiento son una implementación de un grafo de propiedades para un dominio específico.

Entonces, Neo4j es una database de grafo que es similar a otras bases de datos con las que puedes estar familiarizado, como bases de datos relacionales o bases de datos de documentos. Pero la diferencia más grande es que el modelo de datos es un grafo. Entonces, los nodos son las entidades que las relaciones conectan, y con Neo4j utilizamos un lenguaje de consulta llamado Cypher, que también veremos un poco hoy.

Hay muchas cosas interesantes que podemos hacer con bases de datos de grafo y sus implicaciones para las diferentes optimizaciones de rendimiento en comparación con otras bases de datos. Pero, por supuesto, lo que vamos a hablar hoy es sobre la construcción de APIs de GraphQL respaldadas por una database de grafo. Entonces, realmente lo que quiero hablar hoy es sobre la parte de grafo de GraphQL.

En esencia, un grafo es una estructura de data donde los nodos, que son las entidades en el grafo, y las relaciones conectan los nodos. Para trabajar con data en el grafo, a menudo utilizamos un modelo de datos llamado grafo de propiedades, donde agregamos etiquetas a los nodos que describen el tipo de cosa que son y atributos de pares clave-valor que describen los datos reales con los que estamos trabajando. También es posible que hayas oído hablar de los grafos de conocimiento. Los grafos de conocimiento, en mi opinión, son realmente una implementación de un grafo de propiedades para un dominio específico que pone las cosas en contexto, así es como me gusta pensar en ello. Google, cuando anunciaron la API de Google Knowledge Graph, publicaron esta publicación de blog llamada Cosas, no Cadenas, que creo que hizo un buen trabajo explicando qué es un grafo de conocimiento y cómo podemos trabajar con los datos en un grafo de conocimiento.

3. Consulta de Grafo de Noticias con Cypher y GraphQL

Short description:

En este ejemplo, tenemos un grafo de artículos de noticias y sus temas y regiones geográficas. Podemos consultar este grafo de noticias utilizando Cypher, un lenguaje de consulta de base de datos de grafo centrado en la coincidencia de patrones declarativos. Cypher tiene funcionalidades como agregaciones, funciones matemáticas y operaciones específicas de grafo. GraphQL, por otro lado, es un lenguaje de consulta diseñado para trabajar con APIs, con un sistema de tipos que describe los datos disponibles y un conjunto de selección para definir recorridos a través del grafo de datos.

Entonces, en este ejemplo tenemos un grafo de artículos de noticias y sus temas y las regiones geográficas que se mencionan en estos artículos. Cuando estamos mirando un nodo de artículo, sabemos qué es, conocemos sus atributos, pero también tenemos el contexto que lo rodea. Sabemos a qué región geográfica se refiere. También sabemos qué personas y temas trata el artículo.

Así que obtuve algunos datos de la API de New York Times y construí un grafo de conocimiento de esto en Neo4j, por lo que tenemos información sobre artículos, temas, personas mencionadas en los artículos, y cosas por el estilo. Y pensé que este era un conjunto de datos interesante por varias razones y aplicaciones diferentes. Pero lo que quiero usar hoy es hablar sobre diferentes formas de consultar este grafo de noticias si estoy interesado en construir una aplicación. Podría usar GraphQL para consultar este grafo de noticias. De hecho, hay una API de GraphQL en news-graph.versel.app que podemos usar para escribir consultas de GraphQL. En este caso, estamos buscando regiones geográficas específicas dentro de 100 kilómetros de una cierta latitud y longitud. ¿Cuáles son los artículos que mencionan esa región? ¿Cuáles son los temas de esos artículos? También podríamos consultar este grafo de noticias utilizando Cypher, el lenguaje de consulta que usamos con bases de datos de grafo como Neo4j. Esta es una captura de pantalla de Neo4j Browser, que es como un banco de trabajo de consultas para trabajar con Neo4j. Puedes ver que hemos escrito una consulta de Cypher aquí buscando un artículo específico, algo relacionado con criptomonedas en Ucrania. Luego buscamos los temas en otros artículos que comparten esos mismos temas. Con Cypher, dibujamos esta especie de representación de arte ASCII del patrón de grafo con el que queremos trabajar. Y también hay otras herramientas para consultar el grafo de noticias. Podríamos usar herramientas visuales, por ejemplo, Neo4j Bloom, que es una herramienta de exploración de grafo. Todas estas consultan los mismos datos, este grafo de noticias, pero en diferentes modalidades y contextos.

4. Comparación entre Cypher y GraphQL

Short description:

Cypher es un lenguaje de consulta de base de datos de grafo centrado en la coincidencia de patrones declarativos. Tiene funcionalidades como trabajar con agregaciones, funciones matemáticas, operaciones de base de datos, crear índices, importar datos en formato CSV y operaciones específicas de grafo como caminos de longitud variable, funciones de nodo y relación.

Enfoquémonos en comparar Cypher y GraphQL en el contexto de este grafo de noticias data. Esta es una pregunta que surge con frecuencia. ¿Cuál es la diferencia entre Cypher y GraphQL? Ambos parecen hacer algo con grafos. Bueno, fundamentalmente, Cypher es un lenguaje de consulta de base de datos de grafo, como mencioné anteriormente, centrado en la coincidencia de patrones declarativos. Dibujamos estas representaciones de arte ASCII del grafo para describir el patrón con el que queremos trabajar. Cypher tiene muchas funcionalidades que esperaríamos en un lenguaje de consulta de base de datos, como trabajar con agregaciones, funciones matemáticas, operaciones de base de datos, crear índices, importar datos en formato CSV. Y luego muchas operaciones específicas de grafo, como el concepto de caminos de longitud variable, funciones de nodo y relación, entre otras cosas.

5. Comparación de GraphQL y Cypher

Short description:

Si comparamos eso con GraphQL, GraphQL es principalmente un lenguaje de consulta diseñado para trabajar con APIs. Tenemos un sistema de tipos que describe los datos disponibles para el cliente y cómo están conectados. En Cypher, escribimos un patrón similar a un arte ASCII para encontrar y devolver nodos de artículos. Cypher tiene funcionalidades para ordenar, limitar y omitir. En Cypher, podemos agregar un patrón de grafo más complejo para encontrar artículos y sus temas relacionados. Cypher también tiene funcionalidad de ruta más corta. Los artículos recomendados se pueden expresar en Cypher al observar otros artículos que están viendo usuarios similares.

Si comparamos eso con GraphQL, GraphQL es principalmente un lenguaje de consulta diseñado para trabajar con APIs. Entonces tenemos un sistema de tipos que describe exactamente los data que están disponibles para el cliente, cómo están conectados. Este es el grafo de data. Y luego, para describir los recorridos a través del grafo de data, definimos un conjunto de selección en GraphQL.

Veamos algunos ejemplos. Digamos que quiero ver todos los artículos en el grafo de noticias. En Cypher, escribo un patrón similar a un arte ASCII, los paréntesis representan nodos, en este caso, encuentro todos los nodos de artículo y los devuelvo. Con GraphQL, en mi conjunto de selección, comienzo con el campo de consulta de artículo y luego describo los campos de los artículos que quiero devolver.

¿Qué pasa si quiero ver los diez artículos más recientes? Bueno, Cypher tiene la funcionalidad para ordenar, limitar, omitir, para la paginación básica. Esto no está incorporado en GraphQL, pero podemos trabajar con estos elementos como argumentos de campo. Entonces, tal vez nuestro campo de consulta de artículos tenga un argumento de orden de clasificación y un argumento de límite que nos permite lograr lo mismo.

¿Qué pasa si quiero ver los diez artículos más recientes y sus temas? Bueno, en Cypher, agrego un patrón de grafo más complejo. Entonces puedes ver aquí que primero estamos haciendo coincidir todos los artículos y devolviendo el primero por fecha de publicación. Luego tenemos otro patrón de grafo donde estamos recorriendo desde este nodo de artículo a lo largo de esta relación tiene tema a los nodos de tema y devolviendo ambos. Y ahora vemos los diez artículos más recientes y sus temas relacionados. En GraphQL, simplemente agregaríamos a nuestro conjunto de selección para describir este recorrido ahora desde los artículos hasta los temas. Así que estamos comenzando a crear un conjunto de selección anidado aquí.

¿Qué pasa si también quiero, no solo los diez artículos más recientes, sus temas, sino también qué otros artículos hay en esos temas? Bueno, en Cypher simplemente agrego a mi patrón de grafo. Entonces ahora quiero recorrer a lo largo de esta relación tiene tema nuevamente para encontrar artículos que comparten temas similares. Y en GraphQL, agrego a mi conjunto de selección anidado ahora yendo desde los temas hasta los artículos y en este caso, devolviendo el título de esos artículos.

Pero ¿qué pasa si quiero algo como encontrar la ruta más corta en el grafo entre dos nodos, en este caso, el Servicio de Parques Nacionales y la FAA? Bueno, Cypher tiene funcionalidad de ruta más corta y funcionalidad de ruta de longitud variable incorporada en Cypher, por lo que puedo decir, encontrar la ruta más corta que conecta estas dos organizaciones. En este caso, siguiendo cualquier relación. Eso es lo que significa este asterisco entre corchetes, está diciendo seguir cualquier número de relaciones para encontrar la ruta más corta. Y puedo encontrarla a través de un par de artículos sobre escasez de mano de obra que ambas organizaciones están enfrentando. Esta funcionalidad no está realmente incorporada en GraphQL, por lo que GraphQL no tiene una forma nativa de expresar esta idea de una ruta más corta, aunque ciertamente podríamos implementar esta funcionalidad y exponerla a través de ciertos campos en GraphQL. Pero no es algo incorporado.

¿Qué pasa con los artículos recomendados? Muchos sitios de noticias, mientras leo un artículo, me muestran algo como, aquí hay otros artículos que podrían interesarme. Este tipo de cosas. Bueno, en Cypher, hay muchas formas de expresar ese tipo de cosas. Podría ver otros artículos que están viendo usuarios similares.

6. Graph Traversal and Neo4j GraphQL Library

Short description:

Discutimos la travesía del grafo desde un artículo hacia artículos relacionados basados en el autor, los temas o las regiones geográficas. GraphQL no expone estos conceptos, pero podemos implementar un campo recomendado en nuestra API de GraphQL. Al construir una aplicación React para una organización de noticias, utilizamos GraphQL para obtener beneficios como autorización y almacenamiento en caché. La arquitectura implica que una aplicación React realiza consultas a una API de GraphQL, que luego se comunica con la base de datos. Neo4j ha lanzado la biblioteca Neo4j GraphQL, que permite el desarrollo basado en GraphQL y genera una API de GraphQL completa con funcionalidad CRUD basada en las definiciones de tipo.

Podría analizar la superposición de temas. Podría analizar la superposición de regiones geográficas basada en mi historial de lectura, este tipo de cosas. Entonces aquí estamos describiendo una travesía a través del grafo desde un artículo que estoy leyendo hacia artículos que tienen el mismo autor, temas similares o tratan sobre regiones geográficas similares. GraphQL realmente no expone estos conceptos. Y nuevamente, podríamos implementar un campo recomendado en el tipo de artículo en nuestra API de GraphQL para exponer esto. Pero nuevamente, no es algo que esté incorporado de forma inherente.

Los grafos, creo, están realmente en todas partes a nuestro alrededor en diferentes tecnologías. Los vemos en GraphQL. Los vemos en bases de datos de grafos. Pero creo que surge una pregunta para los desarrolladores: saber cuándo aprovechar la tecnología de grafo adecuada en el momento adecuado.

Supongamos, por ejemplo, que estamos construyendo una aplicación React que será el frontend de nuestra organización de noticias. Queremos mostrar artículos, queremos que los usuarios puedan iniciar sesión para guardar artículos, ver artículos recomendados, este tipo de cosas. Hemos hablado sobre cómo consultar este grafo de noticias en Cypher directamente desde la base de datos o GraphQL. ¿Cómo deberíamos estructurar la arquitectura básica de nuestra aplicación para hacer esto? Bueno, al mirar estos ejemplos que vimos, realmente no queremos exponer la base de datos a las aplicaciones de nuestros clientes y permitirles consultar lo que quieran en la base de datos. En cambio, ahí es donde GraphQL realmente brilla, ya que podemos brindar todos los beneficios de GraphQL a nuestra aplicación cliente, pero también tener esta capa que se encuentra entre el cliente y la base de datos donde podemos agregar cosas como autorización, almacenamiento en caché, lógica personalizada, este tipo de cosas.

Entonces nuestra arquitectura se ve algo así, donde nuestra aplicación React está consultando una API de GraphQL. Tal vez esto se implemente como funciones sin servidor o trabajadores de borde, algo así. Y luego nuestra capa de API es la que realmente accede a la base de datos. Para facilitar la construcción de este tipo de arquitectura de aplicaciones, Neo4j ha lanzado la biblioteca Neo4j GraphQL. Esta es una biblioteca de JavaScript para construir APIs de GraphQL en Node.js respaldadas por Neo4j. Hay muchas características realmente poderosas en la biblioteca GraphQL. Veamos algunas de ellas. Una de ellas es esta idea de desarrollo basado en GraphQL. Comenzamos con nuestras definiciones de tipo de GraphQL. Eso define el modelo de datos con el que estamos trabajando. Luego, la biblioteca Neo4j GraphQL utilizará eso para impulsar el modelo de datos para la base de datos y la API. Por lo tanto, no necesito mantener dos esquemas separados, uno para la base de datos, otro para la API. Todo se deriva de estas definiciones de tipo de GraphQL. La biblioteca Neo4j GraphQL tomará esas definiciones de tipo y generará una API de GraphQL completa con operaciones de creación, lectura, actualización y eliminación. Para cada tipo declarado en el esquema.

7. Características de la Biblioteca Neo4j GraphQL

Short description:

La biblioteca Neo4j GraphQL genera una única consulta a la base de datos para cualquier solicitud de GraphQL, eliminando la necesidad de implementar resolvers. Proporciona funcionalidad CRUD y permite lógica personalizada a través de la directiva de esquema Cypher GraphQL. La biblioteca ofrece características poderosas como un modelo de autorización, paginación de cursor de relay y trabajo con uniones e interfaces.

Por supuesto, hay mucho que se puede configurar en lo que se genera. Pero de forma predeterminada, obtenemos campos de consulta y mutación para cada uno de nuestros tipos, ordenamiento, paginación, conexión de relay, paginación, filtrado complejo, así como los tipos geo y date que son compatibles de forma nativa en la database. Y así es como construimos ese gráfico de noticias, GraphQL API al que hice referencia anteriormente.

Ahora, una de las características realmente poderosas de la biblioteca Neo4j GraphQL es la generación de consultas a la database. Esto significa que para cualquier solicitud de GraphQL arbitraria, la biblioteca genera una única consulta a la database. Como desarrollador, no necesito implementar resolvers. Simplemente necesito definir mis definiciones de tipo y luego la biblioteca generará una única consulta a la database en el momento de la consulta. Y esto es genial para la productividad del desarrollador porque no tengo que construir estos resolvers, pero también para el rendimiento, esto resuelve básicamente el problema de la consulta N más uno donde necesito pensar en el agrupamiento o el almacenamiento en caché en mi implementación de GraphQL para no realizar múltiples viajes a la database. En cambio, puedo confiar en que se genera una única consulta a la database, se envía a la database, y la database optimizará cómo manejar esa consulta.

Hemos hablado sobre la funcionalidad CRUD que se genera para nosotros. ¿Qué hay de la lógica personalizada? ¿Cómo la agregamos? Bueno, esta es probablemente mi característica favorita de la biblioteca Neo4j GraphQL. Y esta es la directiva de esquema Cypher GraphQL. Las directivas de esquema son el mecanismo de extensión incorporado de GraphQL. Entonces, con las directivas, puedo indicar que hay alguna lógica personalizada que debe ocurrir en el servidor. Y hay muchas directivas diferentes disponibles para configurar nuestro esquema con la biblioteca Neo4j GraphQL, pero la directiva de esquema Cypher GraphQL es la más poderosa porque nos permite básicamente anotar campos en nuestra API de GraphQL con consultas Cypher. Aquí hemos agregado un campo similar a los tipos de artículo. Esto es algo así como la consulta de recomendación que vimos antes. Si estás leyendo este artículo, ¿qué artículos similares podrían interesarte? Y en este caso, estamos utilizando Graph Data Science, similitud de jacquard para encontrar artículos similares basados en temas. Esto es muy poderoso. Básicamente podemos exponer cualquier funcionalidad de Cypher a través de GraphQL utilizando las directivas de esquema Cypher. Esa es la funcionalidad básica de la Biblioteca Neo4j GraphQL. Hay muchas otras cosas interesantes allí. Hay un modelo de autorización muy poderoso. Mencioné la paginación de cursor de relay así como el trabajo con uniones e interfaces. Muchas cosas interesantes y poderosas en la Biblioteca Neo4j GraphQL. Echemos un vistazo rápido a algo de código. Este es un enlace a CodeSandbox. Simplemente estaba extrayendo de este repositorio de GitHub. Puedes encontrar todo el código en GitHub o en este CodeSandbox. Pero echemos un vistazo rápido para ver qué está sucediendo aquí.

8. Index.js y Definiciones de Tipos GraphQL

Short description:

El archivo index.js importa dependencias y lee las definiciones de tipos GraphQL del archivo schema.graphql. La Biblioteca Neo4j GraphQL se utiliza para pasar estas definiciones de tipos y crear una conexión con la base de datos. Las definiciones de tipos definen los nodos en el gráfico de noticias y sus conexiones. La consulta generada a la base de datos se registra en la consola, lo que permite flexibilidad al consultar datos específicos. El objeto resolveInfo se utiliza por las integraciones de bases de datos GraphQL para generar consultas a la base de datos a partir de las solicitudes GraphQL. Hay recursos disponibles para aprender más sobre Neo4j GraphQL en la página de inicio de Neo4j GraphQL y el Neo4j Sandbox proporciona una plataforma para probar Neo4j con conjuntos de datos precargados.

Este es nuestro archivo index.js. Simplemente importando algunas dependencias y leyendo desde este archivo schema.graphql, que son nuestras definiciones de tipos GraphQL. Pasamos esas definiciones de tipos a la Biblioteca Neo4j GraphQL. Creamos una instancia del controlador de Neo4j solo para crear una conexión con la base de datos. Y luego pasamos ese esquema que creamos con la Biblioteca Neo4j GraphQL a Apollo Server, que maneja nuestra, sirviendo nuestra API GraphQL.

Si observamos nuestras definiciones de tipos, aquí es donde se encuentran las partes interesantes. Hemos definido tipos para artículo, autor, tema. Así que todos esos nodos que vimos en nuestro gráfico de noticias y cómo están conectados. No escribimos ningún resolvedor. Básicamente solo hemos definido nuestras definiciones de tipos. Y aquí está el Playground de GraphQL. Aquí hay una consulta de GraphQL que voy a ejecutar. Buscando los cien artículos más recientes y autores, fotos, Geo. Así que básicamente todo lo conectado a esos artículos y puedes ver los resultados que llegan.

Una cosa que quiero señalar aquí es que podemos ver la consulta generada a la base de datos que se registra en la consola aquí. Por lo tanto, se genera en tiempo de consulta para cualquier solicitud GraphQL arbitraria. A medida que modificamos la consulta GraphQL, tal vez si solo estamos consultando artículos, solo veremos en la consulta generada a la base de datos que solo estamos obteniendo nodos de artículos. Muy poderoso para la productividad del desarrollador para tener una API GraphQL en funcionamiento sin escribir ningún resolvedor y aprovechando todo el poder del modelo de gráfico con la Biblioteca Neo4j GraphQL. Y nuevamente, todo el código está enlazado en GitHub.

Como un pequeño aparte, es posible que te preguntes cómo funcionan estas integraciones de bases de datos GraphQL bajo el capó, cómo pueden generar consultas a la base de datos a partir de una solicitud GraphQL. Y la respuesta está dentro de cada resolvedor, uno de los argumentos pasados es el objeto resolveInfo que contiene mucha información sobre el esquema GraphQL y la operación GraphQL que se está resolviendo actualmente. Entonces aquí puedes ver todas las cosas que están en el objeto resolveInfo. Y básicamente lo que hacen estas integraciones de bases de datos es inspeccionar este objeto resolveInfo, mirar el conjunto de selección anidado para la consulta y esencialmente iterar a través de eso y generar una consulta a la base de datos en el resolvedor raíz, lo cual es un patrón muy poderoso. Di una charla en la Cumbre de GraphQL sobre esto hace un tiempo. Así que la grabación está ahí si estás interesado en profundizar en eso con un poco más de detalle.

Genial, bueno, creo que eso es todo el tiempo que tenemos por hoy. Quiero terminar hablando de algunos recursos. Si estás interesado en aprender más. Un buen lugar para comenzar es la página de inicio de Neo4j GraphQL que tiene enlaces a la documentación, ejemplos, así como a Graph Academy, que es una formación en línea a tu propio ritmo que profundiza mucho más, todo centrado en la construcción de APIs GraphQL con Neo4j. Para probar Neo4j, creo que el mejor lugar para ir es el Neo4j Sandbox, que nos permite crear instancias de Neo4j con conjuntos de datos precargados.

QnA

Neo4j GraphQL Integration and Q&A

Short description:

Tenemos GraphQL expuesto a través de enlaces a ejemplos de código preconstruidos en Neo4j Sandbox. Neo4j está contratando específicamente para el equipo de GraphQL, buscando crecer. Si estás interesado, por favor contáctanos. El 60% de la audiencia está utilizando GraphQL en producción. La comunidad de GraphQL está madurando, abordando problemas de escalabilidad y avanzados. Sorprendentemente, el 20% no está utilizando GraphQL pero asistió a la conferencia. Pasemos a las preguntas y respuestas. La primera pregunta es sobre la posición en Neo4j para el trabajo de integración de GraphQL.

También tenemos GraphQL expuesto a través de enlaces a ejemplos de código preconstruidos en Neo4j Sandbox. También quiero mencionar que Neo4j está contratando, pero específicamente el equipo de GraphQL en Neo4j está contratando y buscando crecer. Si esto suena interesante para trabajar, por favor contáctanos. Puedes encontrar las publicaciones en nuestro sitio de trabajo o simplemente envía un correo electrónico a graphql.neo4j.com. Muchas gracias por unirte hoy. Y nuevamente, por favor contáctame en Twitter si deseas seguir en contacto. ¡Saludos!

¿Estás utilizando GraphQL en producción fue la pregunta y el 60% de nuestra audiencia está diciendo que sí, eso es increíble. Pero ¿esperabas que haya tanta gente que ya esté utilizando GraphQL en una conferencia o simplemente no era lo que esperabas en absoluto? Sí, supongo que tiene sentido. Quiero decir, ya que estamos en una conferencia centrada en GraphQL, supongo que hay dos tipos de personas interesadas en una conferencia de GraphQL. Es como, estoy utilizando GraphQL en producción y estoy listo para avanzar y pensar en la escalabilidad y este tipo de cosas y las cosas avanzadas y los otros tipos de, bueno, sé sobre GraphQL, es algo en lo que estamos pensando. Así que quiero aprender más sobre los conceptos introductorios. Sí, supongo que para una conferencia centrada en GraphQL, supongo que pensé que habría un poco más que eso, pero supongo que eso muestra que hay una buena mezcla de ambos tipos de personas, ¿verdad? Personas que están listas para avanzar y en el tipo de persona introductoria. Sí, entiendo eso. Supongo que una cosa que realmente he notado, creo que en la comunidad de GraphQL en general, al mirar esto en los últimos años en los que he estado involucrado en trabajar con GraphQL, parece que la comunidad de GraphQL está madurando realmente. Si miras los tipos de herramientas y supongo que también las mejores prácticas y tendencias que estás viendo, creo que las personas están enfrentando ese problema de, ok, estoy utilizando GraphQL en producción y ahora necesito pensar en cómo escalar, cómo abordar problemas más avanzados. Sí, tiene sentido para mí. Sí, también me sorprendió bastante porque hay un 20% que simplemente dijo que no y que no lo están planeando. Así que no estás utilizando GraphQL y no tienes planes de hacerlo, pero estás aquí. Bueno, aún así, estoy feliz de tenerte aquí, por supuesto. Pero sí, eso fue sorprendente para mí. Suficiente hablar sobre las preguntas de la encuesta. Pasemos a las preguntas y respuestas. Y perdí mi ventana. ¿Dónde estás, ventana de preguntas? Aquí está. Así que la primera pregunta es de un amigo. Ese es un buen nombre. Mencionaste que Neo4j está contratando para el trabajo de integración de GraphQL en Neo4j, pero ¿puedes describir un poco cómo es la posición y qué tipo de experiencia de fondo es necesaria? Entonces, ¿qué perfil estás buscando en realidad? Oh sí, esa es una gran pregunta. Sí, en mi charla hablé sobre esta biblioteca de GraphQL de Neo4j, que es una biblioteca de Node.js que facilita la construcción de APIs de GraphQL respaldadas por Neo4j. Hablamos sobre algunas de las características en eso.

Neo4j GraphQL Library Contratación y Próximos Pasos

Short description:

El equipo que trabaja en la biblioteca Neo4j GraphQL está contratando ingenieros en Europa. Buscan familiaridad con TypeScript, el ecosistema de Node.js y el ecosistema de GraphQL. El equipo también está considerando los próximos pasos para la biblioteca, como casos de uso avanzados, escalabilidad y rendimiento. Si tienes experiencia en escalar GraphQL en producción, al equipo le interesaría contar contigo. Neo4j también está contratando para varios roles y habilidades.

Entonces, el equipo que trabaja en esa biblioteca está contratando ingenieros en Europa para trabajar en la biblioteca. Está escrita en TypeScript, por lo que se requiere cierta familiaridad con TypeScript y el ecosistema de Node.js y el ecosistema de GraphQL también. Creo que también están pensando en los próximos pasos, ¿verdad? Como mirar algunos de esos casos de uso más avanzados de GraphQL de los que hablamos antes, ¿verdad? Como escalar, mejorar el rendimiento. Creo que esas son las cosas en las que el equipo está pensando a continuación.

Si has escalado GraphQL en producción o algo similar, tener esa experiencia, creo que el equipo estaría encantado de contar contigo. Pero sí, definitivamente TypeScript es lo que el equipo hace a diario. Y si eso no encaja del todo, Neo4j está contratando para muchos roles y habilidades de ingeniería. Te recomendaría que eches un vistazo a la página de carreras que enlacé en las diapositivas. Seguramente encontrarás algo que se ajuste a tus habilidades. Hay algo para todos. Eso es cierto.

Database Company and Diverse Competencies

Short description:

Como una empresa de bases de datos, hay varias piezas con las que trabajar, incluyendo ingenieros de Java básico, Scala para el lenguaje de consulta Cypher y herramientas de escritorio para visualización de gráficos. Es interesante ver las competencias diversas requeridas para esta herramienta.

Bueno, quiero decir, cuando eres una empresa de bases de datos, como una base de datos es tan central para tu aplicación de infraestructura que realmente hay muchas piezas diferentes con las que tienes que trabajar. Quiero decir, tenemos ingenieros de Java básico que trabajan en la optimización de la base de datos. El lenguaje de consulta Cypher está escrito en Scala. Tenemos herramientas de escritorio para visualización de gráficos, donde estás trabajando en cosas de alto rendimiento con WebGL. Así que sí, hay muchas habilidades y conjuntos de herramientas diferentes por ahí. Sí, siempre es divertido. Siempre me parece agradable escuchar cuántos tipos diferentes de competencias necesitas para una herramienta así. Como dices, que tienes desarrolladores de Java y Scala trabajando para ti o para tu empresa. Sí, es agradable ver a tanta gente unida de diferentes orígenes construyendo más productos.

Authorization in Neo4j GraphQL Library

Short description:

Hay múltiples opciones para manejar la autorización al usar la biblioteca Neo4j GraphQL. Puedes implementar tu propia capa de autorización o usar la función de autorización incorporada que utiliza las directivas de esquema de GraphQL. La directiva de esquema Auth GraphQL te permite definir reglas de autorización en tu esquema, como especificar que solo los autores de una publicación de blog pueden editarla. Esta función funciona con JSON Web Tokens (JWT) y admite varios proveedores de identidad. La flexibilidad de la biblioteca Neo4j GraphQL permite a los desarrolladores personalizar la autorización y la autenticación según sus necesidades específicas.

La siguiente pregunta es de un usuario. Supongo que es un usuario anónimo. ¿Qué hay de la autorización? ¿Cómo manejaríamos la autorización de la aplicación al usar la biblioteca Neo4j GraphQL? ¿Depende únicamente del desarrollador implementarlo ellos mismos? Sí, buena pregunta. Aquí hay algunas opciones. Supongo que una de las cosas sobre la biblioteca Neo4j GraphQL es ser lo más flexible posible. Por lo tanto, definitivamente puedes implementar tu propia capa de autorización como lo harías con cualquier otro servicio GraphQL. Hay muchas opciones diferentes allí, pero hay una función de autorización incorporada en el núcleo de la biblioteca Neo4j GraphQL que utiliza las directivas de esquema de GraphQL. En mi charla, mostré algunos ejemplos de cómo usar las directivas de esquema de GraphQL para configurar un poco la API. Vimos la directiva de relación para definir relaciones en el esquema y también la directiva de esquema Cypher GraphQL para agregar lógica personalizada a tu API. También hay una directiva de esquema Auth GraphQL que puedes usar para definir reglas de autorización en tu esquema. Por ejemplo, puedes crear una regla que diga que solo los autores de una publicación de blog pueden editarla o si tal vez tienes el rol de administrador también puedes editar eso, este tipo de cosas. Y funciona con un JSON Web Token, JWT. Por lo tanto, puedes usar cualquier proveedor de identidad siempre y cuando genere un JSON Web Token. Nuevamente, está diseñado para ser lo más flexible posible pero aún así tener estas características enfocadas en la productividad del desarrollador. Porque es bastante agradable, creo, poder definir este tipo de cosas en tu esquema de GraphQL que son bastante poderosas. Entonces, supongo que ese sería mi primer enfoque sería ver y ver las características admitidas por esta directiva de esquema de autenticación GraphQL con las reglas que podemos crear. ¿Coincide eso con tus necesidades para agregar autorización y autenticación? Si es así, esa puede ser una característica muy poderosa incorporada. Genial, gracias William.

Despliegue de la API GraphQL con la biblioteca Neo4j GraphQL

Short description:

Puedes desplegar la capa de la API GraphQL utilizando cualquier implementación de GraphQL en JavaScript con la biblioteca Neo4j GraphQL. Next.js es un buen marco para construir aplicaciones de pila completa, con su función de rutas de API que te permite definir una entrada para tu API GraphQL. El despliegue de una aplicación Next.js se puede hacer de diferentes formas, y Vercel puede desplegar tus puntos finales de API como funciones sin servidor. Esta combinación de Next.js y Vercel es excelente para construir aplicaciones GraphQL de pila completa. Si hay más preguntas, no dudes en preguntar. De lo contrario, haremos un breve descanso y volveremos pronto. William estará disponible en su sala de conferencias en Spatial Chat para discutir cualquier cosa sobre Neo4j. Gracias y que tengas un buen día.

La siguiente pregunta es de Sam. ¿Cómo podríamos desplegar la capa de la API GraphQL? Dijiste que la biblioteca Neo4j GraphQL es para construir API GraphQL en Node.js, pero ¿qué pasa si quiero desplegarlo como una función sin servidor? Sí, nuevamente, volviendo a esta idea de tratar de design la biblioteca para enfocarse en la flexibilidad, realmente puedes usar cualquier implementación de GraphQL en JavaScript con la biblioteca Neo4j GraphQL para aprovechar cosas como la generación de consultas a la base de datos, el proceso de ampliación del esquema GraphQL. Básicamente, obtienes un objeto de esquema ejecutable de GraphQL que luego puedes usar con Apollo Server o realmente cualquier implementación de GraphQL en JavaScript. Por lo tanto, es fácil de usar como una función Lambda o desplegar como una función sin servidor.

Me gusta usar Next.js para construir aplicaciones de pila completa. Next.js es este marco construido sobre React. Entonces puedo construir mis interfaces de usuario con React y Next.js, pero Next.js también tiene esta característica muy genial llamada rutas de API. Entonces, en la misma base de código, en el mismo marco, puedo definir una entrada para mi API GraphQL. Puedo aprovechar la biblioteca Neo4j GraphQL con eso. Y luego, cuando voy a desplegar eso, hay diferentes formas de desplegar una aplicación Next.js. Pero Vercel, que trabaja en Next.js, desplegará tus puntos finales de API como funciones sin servidor sin que tengas que pensar en eso. Así que esa es una buena combinación que me gusta usar para mis aplicaciones GraphQL de pila completa es Next.js y Vercel. Nuevamente, creo que es algo que se enfoca mucho en la productividad del desarrollador, lo cual es muy agradable si estás construyendo aplicaciones de pila completa.

Sí, es una combinación realmente agradable, una forma realmente agradable de trabajar. También soy un gran fan. Genial, gracias. Tenemos tiempo para algunas preguntas más, sí. La siguiente pregunta es de Daria, ¿qué hay de la autorización? ¿Cómo manejaríamos la autorización de la aplicación? Espera. Creo que recibimos esa pregunta correctamente. Es la misma pregunta, formulada de manera diferente. Oh, no, espera. No, solo estoy leyendo doble. Lo siento, esas fueron las preguntas que tenemos de nuestra audiencia. Así que si todavía hay alguien que quiera saber algo de William, ahora es el momento de hablar o guardar silencio para siempre. Y de lo contrario, te dejaré ir, William. Tomaremos un breve descanso y volveremos en cinco minutos. Y si quieres hablar con William, William irá a su sala de conferencias en Spatial Chat para discutir cualquier cosa que desees sobre Neo4j. William, ha sido un placer hablar contigo y que tengas un buen día. Adiós. Genial, muchas gracias. ¡Salud!

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
47 min
Design Systems: Walking the Line Between Flexibility and Consistency
Top Content
Design systems aim to bring consistency to a brand's design and make the UI development productive. Component libraries with well-thought API can make this a breeze. But, sometimes an API choice can accidentally overstep and slow the team down! There's a balance there... somewhere. Let's explore some of the problems and possible creative solutions.
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.

Workshops on related topic

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 Advanced Conference 2022React Advanced Conference 2022
95 min
End-To-End Type Safety with React, GraphQL & Prisma
Featured WorkshopFree
In this workshop, you will get a first-hand look at what end-to-end type safety is and why it is important. To accomplish this, you’ll be building a GraphQL API using modern, relevant tools which will be consumed by a React client.
Prerequisites: - Node.js installed on your machine (12.2.X / 14.X)- It is recommended (but not required) to use VS Code for the practical tasks- An IDE installed (VSCode recommended)- (Good to have)*A basic understanding of Node.js, React, and TypeScript
GraphQL Galaxy 2022GraphQL Galaxy 2022
112 min
GraphQL for React Developers
Featured Workshop
There are many advantages to using GraphQL as a datasource for frontend development, compared to REST APIs. We developers in example need to write a lot of imperative code to retrieve data to display in our applications and handle state. With GraphQL you cannot only decrease the amount of code needed around data fetching and state-management you'll also get increased flexibility, better performance and most of all an improved developer experience. In this workshop you'll learn how GraphQL can improve your work as a frontend developer and how to handle GraphQL in your frontend React application.
React Summit 2022React Summit 2022
173 min
Build a Headless WordPress App with Next.js and WPGraphQL
Top Content
WorkshopFree
In this workshop, you’ll learn how to build a Next.js app that uses Apollo Client to fetch data from a headless WordPress backend and use it to render the pages of your app. You’ll learn when you should consider a headless WordPress architecture, how to turn a WordPress backend into a GraphQL server, how to compose queries using the GraphiQL IDE, how to colocate GraphQL fragments with your components, and more.
React Summit 2023React Summit 2023
137 min
Build a Data-Rich Beautiful Dashboard With MUI X's Data Grid and Joy UI
Top Content
WorkshopFree
Learn how to put MUI’s complete ecosystem to use to build a beautiful and sophisticated project management dashboard in a fraction of the time that it would take to construct it from scratch. In particular, we’ll see how to integrate the MUI X Data Grid with Joy UI, our newest component library and sibling to the industry-standard Material UI.
Table of contents:- Introducing our project and tools- App setup and package installation- Constructing the dashboard- Prototyping, styling, and themes - Joy UI features- Filtering, sorting, editing - Data Grid features- Conclusion, final thoughts, Q&A
GraphQL Galaxy 2020GraphQL Galaxy 2020
106 min
Relational Database Modeling for GraphQL
Top Content
WorkshopFree
In this workshop we'll dig deeper into data modeling. We'll start with a discussion about various database types and how they map to GraphQL. Once that groundwork is laid out, the focus will shift to specific types of databases and how to build data models that work best for GraphQL within various scenarios.
Table of contentsPart 1 - Hour 1      a. Relational Database Data Modeling      b. Comparing Relational and NoSQL Databases      c. GraphQL with the Database in mindPart 2 - Hour 2      a. Designing Relational Data Models      b. Relationship, Building MultijoinsTables      c. GraphQL & Relational Data Modeling Query Complexities
Prerequisites      a. Data modeling tool. The trainer will be using dbdiagram      b. Postgres, albeit no need to install this locally, as I'll be using a Postgres Dicker image, from Docker Hub for all examples      c. Hasura