la siguiente
GraphQL pública. ¿Cómo lo llamamos, la siguiente
GraphQL pública URI. Creo que lo llamamos así. Vamos a ver en nuestro archivo ENV. La siguiente
GraphQL pública URI es slash API slash
GraphQL. Bien, voy a agregar esas variables de entorno y luego hacer el despliegue. Y ahora Vercel va a clonar ese repositorio, hacer una compilación de
NPM y el contenido estático que se ha generado se enviará al CDN de Vercel. Los puntos finales de la API, así que teníamos, lo que teníamos slash hello, que era nuestro muy simple y nuestro punto final
GraphQL se desplegará como una función sin servidor. Así que podemos echar un vistazo a los registros y ver cómo avanza eso. Una vez que esto esté hecho, entonces tendremos una URL única para nuestro proyecto. Hm. Si voy, mientras espero esto, si voy a mi equipo aquí para ver todos mis proyectos, ahí vamos, aquí está el estado de esto. Supongo que esto ya está hecho. Fullstack-graphQL.vercell.app. Ahí vamos. Bienvenido a
Next.js. Si voy a slash articles, debería ver mi lista con viñetas de artículos. Sí, así que eso proviene del punto final
GraphQL que se está ejecutando en slash API slash
GraphQL. Justo aquí, genial. Así que hemos desplegado nuestra aplicación
Next.js, tanto el punto final
GraphQL del
backend como el
frontend también, lo cual es bastante bueno. Y, así que me detendré aquí por otros cinco minutos más o menos para dar a las personas la oportunidad de seguir esto. Así que inicia sesión en Vercel, crea un nuevo proyecto, importa el repositorio de GitHub que creaste a partir de la plantilla, configura esas variables de entorno, y básicamente usa lo que está en.env.local y luego haz clic en desplegar y deberías ver algo como esto. Y si vas a tu dominio slash articles, deberías ver la lista de artículos. Si vas a slash API slash
GraphQL, deberías ver
GraphQL Playground y puedes escribir algunas consultas
GraphQL. Así que nos detendremos en esta diapositiva, supongo, durante cinco minutos y luego pasaremos a la sección final que será agregar recomendaciones de artículos. Así que necesitaremos agregar algo de lógica personalizada a nuestra API
GraphQL y luego aprovechar esa funcionalidad en el
frontend. Sigamos adelante, en aras del tiempo aquí para hablar sobre cómo agregar lógica personalizada. Entonces, lo que queremos hacer ahora es que tenemos la funcionalidad básica de consulta para obtener artículos pero sería bueno si en lugar de solo mostrar artículos, los artículos más recientes, pudiéramos decir sabes, estoy leyendo un artículo y me gustaría leer otros artículos similares. ¿Puedo recomendar artículos similares basados en el artículo que estás viendo actualmente? Así que queremos agregar esa funcionalidad tanto a la API como también queremos agregarla al
frontend para obtener esos datos de la API y mostrarlos en el
frontend. Pero para hacer eso primero necesitamos hablar un poco sobre cómo podemos agregar lógica personalizada a nuestra API
GraphQL utilizaremos la directiva de esquema Cypher que mencionamos un poco antes pero realmente profundizaremos en el poder de esa directiva de esquema Cypher. Entonces, cuando estamos utilizando la biblioteca Neo4j
GraphQL básicamente hay dos formas en las que podemos agregar lógica personalizada a nuestra API
GraphQL. Podemos hacer esto utilizando la directiva de esquema Cypher
GraphQL donde estamos anotando nuestro esquema
GraphQL, agregando lógica personalizada básicamente mapeando una consulta Cypher a un campo en nuestro esquema
GraphQL. Y cuando hacemos esto, el beneficio de esto es que se encarga de mucho código repetitivo que no tenemos que escribir, simplemente estamos agregando una consulta Cypher a nuestro esquema
GraphQL. Ahora, aún estamos generando una sola consulta Cypher que se envía a la base de datos incluso con nuestra consulta de lógica personalizada, nuestra consulta se integra como una subconsulta en esa consulta generada de la base de datos. Y luego, otra opción para agregar lógica personalizada es implementar un resolver personalizado. Podemos anular los resolvers generados o podemos definir tipos que en realidad no existen en la base de datos y resolverlos usando resolvers personalizados. La desventaja de eso es que es un poco más de código que tenemos que escribir. Podemos hacer básicamente lo que queramos en ese resolver, podemos consultar Neo4j, podemos consultar otro sistema de base de datos, lo que sea que sea. Bueno, otra desventaja es que llamaremos a ese resolver de forma anidada. Primero enviaremos la consulta a la base de datos, luego llamaremos a este resolver que podría resultar en otra solicitud a la base de datos o a otra capa de datos. Así que es importante tener en cuenta las distinciones allí. Así que veamos esta directiva de esquema Cypher. Entonces, dijimos antes que las directivas de esquema son el mecanismo de extensión incorporado de
GraphQL. Alguna indicación de que debe ocurrir alguna lógica personalizada. Cypher es una directiva de esquema disponible con la biblioteca Neo4j
GraphQL. Hay bastantes, hasta ahora hemos visto exclude y relationship. Echemos un vistazo en la documentación a las otras directivas que están disponibles. Aquí vamos, directivas. Así que dejo un enlace a esta página en el chat. Podemos ver que tenemos bastantes directivas disponibles, cosas como agregar reglas de autorización, Cypher, que vamos a usar en un minuto aquí, exclude, que usamos. ID, que es útil para generar automáticamente IDs. La directiva de relación que vimos que usamos para codificar la dirección de la relación. Así que hay bastantes directivas que son bastante poderosas. Con Cypher, lo que hacemos es agregar la directiva Cypher y una declaración Cypher. En este caso, estamos devolviendo un escalar para un campo float. Así que el ejemplo de esto se refiere a las órdenes que pueden contener varios libros y estamos calculando la suma del precio de esos libros para obtener el subtotal, devolviendo un float. Luego, en el momento de la consulta al cliente de esta API
GraphQL, no es obvio que este es un campo calculado, esto simplemente aparece como otro campo en el esquema de la API. También podemos devolver nodos desde nuestra consulta Cypher que se asignan a tipos que hemos definido en el esquema. Entonces, aquí hay un campo recomendado para un cliente que va a devolver libros en los que podrían estar interesados basados en los libros que este usuario ha ordenado y otros libros ordenados por usuarios. Básicamente, ¿qué usuarios están ordenando los mismos libros? ¿Qué otros libros están ordenando esos usuarios? Esos podrían ser buenas recomendaciones. Pero, ten en cuenta que estamos devolviendo, en este caso, REC, que es booknets. Y nuevamente, para los clientes de nuestra API, recomendado simplemente aparece como otro campo, en este caso, un campo de objeto. Cualquier argumento de campo que definamos en
GraphQL y nuestras definiciones de tipo para el campo donde estamos usando la directiva cypher se pasan a la declaración cypher como parámetros cypher. Así que aquí en este campo recomendado, hemos agregado un argumento limit, que es un entero con un valor predeterminado de tres. Y cualquier valor que se pase por el usuario en el momento de la consulta, cualquier valor para limit que se pase como un parámetro cypher aquí con esta sintaxis de signo de dólar limit.
Comments