¿Cómo utilizar GraphQL y autogeneración en Next.js?
GraphQL, una poderosa herramienta para interactuar con APIs, se integra en nuestros proyectos de Next.js, llevándonos a explorar un mundo de autogeneración mediante este tutorial. Veremos cómo conectar GraphQL con Contentful y cómo la autogeneración en TypeScript mejora la calidad de nuestro código.
¿Qué es la API de GraphQL y cómo se utiliza con Contentful?
Si no estás familiarizado con GraphQL, es esencial conocer que GraphQL nos permite interactuar directamente con APIs a través del navegador. Para este propósito, Contentful nos facilita un editor donde podemos escribir y ejecutar queries.
Configuración de la Session: Necesitarás el Space ID y el Content Delivery API Token, que previamente configuraste en Contentful.
Editor GraphiQL: Ofrece un entorno donde escribimos nuestras queries a la izquierda y vemos los resultados a la derecha.
¿Cómo ejecutar una query básica en GraphQL?
Para una mejor comprensión, podemos empezar con una query simple en GraphQL para obtener una colección de plantas y sus autores.
Esta query pide el nombre de las plantas y los nombres completos de los autores en cada item del conjunto de resultados.
¿Integración de GraphQL en un proyecto de Next.js?
Implementar queries de GraphQL en Next.js es más simple de lo que parece. Utilizamos window.fetch con el método POST para llamar al endpoint de GraphQL, y autenticamos mediante headers:
Esta estructura básica será la manera en que interactuamos de primera mano con la API desde nuestro proyecto en JavaScript.
¿Cuáles son las ventajas de la autogeneración de código en TypeScript?
Autogenerar código con GraphQL resulta esencial para un desarrollo más eficiente y seguro. Proporcionamos a TypeScript la capacidad de inferir tipos a partir de las respuestas de GraphQL, esto se logra a través de herramientas como GraphQL Code Generator.
Ventajas:
Validación de Tipo: Nos protege de acceder a propiedades inexistentes en las responses.
Type Safety: Facilita el trabajo del desarrollador mediante sugerencias de autocompletado precisas basadas en los tipos conocidos.
Este enfoque introduce la capacidad de desarrollar rápidamente con menos errores, confiando siempre en las herramientas automáticas para lidiar con estructuras complejas de datos.
¿Cómo configurar la autogeneración en TypeScript?
Para garantizar que las claves de API no se comparten, es primordial guardarlas en variables de entorno. Así, mantenemos la seguridad de nuestros proyectos:
Estas variables permiten que el script de generación de TypeScript se ejecute correctamente y aseguren que nuestro código respete las mejores prácticas de seguridad.
¿Qué sigue después de integrar GraphQL y TypeScript?
Con GraphQL y TypeScript configurados, Next.js nos invita a explorar más allá. La ejecución del código autogenerado propicia aplicaciones más rápidas y seguras. Te animamos a seguir practicando, incluso desafiarte a configurar tu propia API con GraphQL Code Generator. La clave está en experimentar y optimizar el poder de estas tecnologías integradas.
Invitamos a todos a sumergirse y jugar con estas herramientas. Con GraphQL, la autogeneración y Next.js, estás construyendo aplicaciones que no solo son modernas, sino escalables y robustas. ¡Buena suerte en tu camino hacia más conocimiento!
Para no tener que tipear cada que quieres levantar el server las variables de entorno puedes crear un archivo .env en la raíz del proyecto y ahí colocar los datos.
Yo las incluí en el archivo next.config.js como muestra la bibliografía oficial :
Es ultra práctico.
Yo también lo hice así Francisco.
Buen curso hasta ahora, pero me parece que sería interesante profundizar un poco más sobre como se configuró la autogeneración de código o al menos entender como configurarlo para cualquier proyecto (básicamente lo que esta en la carpeta generated), nose si existe ya otro curso en Platzi sobre esto?
Estoy de acuerdo contigo, me parece que el curso va muy bien, pero me causa curiosidad toda la autogeneración de cogido para GraphQL, seria chévere hacer un curso, o una profundización mas al respecto de eso.
Asi es, se sienten varios vacios sin explicar, pero capaz en el transcurso del curso puede que se entienda mejor.
Si no conoces nada de GraphQL te explico rapido.
GraphQL es es un lenguaje de consulta para APIs, y un entorno de ejecución para realizar consultas con datos. Es desarrollado por Facebook y lo increible es como si pareciera Algo a SQL pero para traer o manipular datos.
Hay muchas formas de poder usar GraphQL con JavaScript
Aqui te dejo un link de como integrar graphql
En conquetro me gusta usar Apollo
Por ahora soluciona el inconveniente pero ahora muestra una advertencia de que createMuiTheme es una función deprecada, si alguien conoce una mejor forma de adaptar el código es bienvenida.
En la terminal te indica que fue lo que cambio, solo remplaza en las siguientes líneas.
Para aquellos en 2024 que esten siguiendo los pasos, les van a salir varios errores, si tienes una IA como copilot, los puede ir guiando, pero si no, algunos pasos:
1.- En el archivo next.config.js, así tienen que tenerlo, ya que da un error con una clave de webpack 5
const withBundleAnalyzer = require('@next/bundle-analyzer')({ enabled: process.env.ANALYZE === 'true',})
const config = { // Otras configuraciones si las hay}
module.exports = withBundleAnalyzer(config)
2.- Tienes que tener instalado una dependencia llamada cross-env, es para las variables de entorno : npm install cross-env --save-dev
3.- Tambien tienen que tener en su package.json asi:
{
"scripts": {
"dev": "cross-env NODE_OPTIONS=--openssl-legacy-provider next dev",
"build": "cross-env NODE_OPTIONS=--openssl-legacy-provider next build",
"start": "cross-env NODE_OPTIONS=--openssl-legacy-provider next start",
4.-La version de react y react-dom tienen que actualizarlas: npm install react@latest react-dom@latest
5.- Hagan un npm audit fix --force para que todas las dependencias de compongan.
Ahora si corre tu proyecto con npm run dev, el curso ya tiene sus años, entonces es algo complejo hacer que funcione en 2024, si no hacen esos pasos les va a salir que cambien de version de node a la 16.
Espero les sirve alguno.
Aqui les dejo los shortcuts principales
yo no me los sabia jaja y tenia temas con el auto completado
Aquí está la url para acceder al explorador de Graphql
Link :
/explore?access_token=(CDA_TOKEN))
Puede usarse en lugar de Contenful una api en django??
Totalmente! Usé Contentful para "incomodarlos" y tener una base de datos relativamente grande lista :D
Mi ts no está reconociendo el tipo planta.... ¿qué debería hacer?
hubiera sido bueno que explicara un poco como hacer la generación de código
Hola hola claro que sí, no daba para una clase y nos salíamos del tema.
Pero hey! sigue atento al nuevo curso de GraphQL con Next.js, el cual es la continuación del curso de Node.js: GraphQL con Apollo Server y Prisma: https://platzi.com/cursos/nodejs-graphql/
Allí vemos paso a paso como crear nuestro propio server de GraphQL y como se auto genera el código ;)
Contentful no esta disponible en mi pais, que hago en ese caso?
no puede ser!
si no cuentas con VPN, entonces sugeriría crear tu propia base de datos con cualquier otro CMS. Por ejemplo, Wordpress. En su modo "headless" permite conectar como cualquier otra API.
**Al intentar correr el proyecto tengo este error: **
Cloné el proyecto
Instalé las dependencias (con npm install)
Hice el checkout a una nueva rama desde el tag 0-inicio
Hola ! probaste a hacer npm install otra vez cuando ya estabas en la nueva rama desde el tag 0-inicio ? en ocasiones cambiar de tag puede ocasionar conflictos con las dependencias
En el curso de Next.js con GraphQL en la clase auto generacion de codigo se muestra en detalle todo lo que hizo el profesor con la herramienta de auto generacion de codigo.
Asumo que como ya explicó el uso de esa herramienta ya no era necesario volver a explicarlo y solo optó por nombrarla.
Para no estar escribiendo las variables de entorno cada vez que levantemos nuestro server, dentro del archivo next.config.js hacemos los siguiente:
constTU_SPACE_ID='tu space id';constTU_ACCESS_TOKEN='tu access token';module.exports={env:{NEXT_PUBLIC_SPACE_ID:TU_SPACE_ID,NEXT_PUBLIC_ACCESS_TOKEN:TU_ACCESS_TOKEN,}}
De esta manera next tendra a la mano tus variables de entorno. deben reiniciar el server a la hora de agregar este codigo.
Para ahorrar tiempo con las variables de entorno cuando se inicia el server las incluí en el archivo next.config.js como muestra la bibliografía oficial :
Y así solo necesitamos npm run dev sin las largas variables