search
CursosEmpresasBlogLiveConfEventosPrecios
Curso Avanzado de Node.js con GraphQL, Apollo Server y Prisma

Construyendo una query simple con Apollo Server

Curso Avanzado de Node.js con GraphQL, Apollo Server y Prisma

Contenido del curso

Introducción

  • 1
    ¿Por qué GraphQL?

    ¿Por qué GraphQL?

    03:40 min
  • 2
    Arquitectura backend con Node.js y GraphQL

    Arquitectura backend con Node.js y GraphQL

    03:06 min
  • 3
    Construyendo una query simple con Apollo Server

    Construyendo una query simple con Apollo Server

    Viendo ahora
  • 4
    Scalars, filtros y queries avanzadas

    Scalars, filtros y queries avanzadas

    18:57 min

Base de datos y ORM

  • 5
    ORMs, Prisma y automatización

    ORMs, Prisma y automatización

    02:53 min
  • 6
    Modelando la base datos y schema

    Modelando la base datos y schema

    12:57 min
  • 7
    Resolvers para mutaciones y filtros

    Resolvers para mutaciones y filtros

    20:28 min
  • 8
    Filtros en Prisma

    Filtros en Prisma

    13:24 min
  • 9
    Paginación y filtros avanzados

    Paginación y filtros avanzados

    10:46 min
  • 10
    Archivos estáticos

    Archivos estáticos

    07:14 min
  • 11
    Archivos estáticos con Express.js y Apollo Server

    Archivos estáticos con Express.js y Apollo Server

    09:18 min

Producción

  • 12
    Protección de recursos en GraphQL

    Protección de recursos en GraphQL

    20:57 min
  • 13
    Testing

    Testing

    17:12 min
  • 14
    Pruebas End to End: Estrategias y Herramientas Efectivas

    Pruebas End to End: Estrategias y Herramientas Efectivas

    01:54 min
  • 15
    Preparando la app para producción

    Preparando la app para producción

    15:54 min
  • 16
    Preparando el servidor para Heroku

    Preparando el servidor para Heroku

    05:56 min
  • 17
    Introspección

    Introspección

    03:56 min
  • 18
    Bases de datos en producción

    Bases de datos en producción

    08:37 min
  • 19
    Deploying

    Deploying

    15:52 min

Próximos pasos

  • 20
    Reto: guestbook

    Reto: guestbook

    02:53 min
  • 21
    Desventajas de GraphQL

    Desventajas de GraphQL

    08:18 min
  • 22
    Frameworks de GraphQL

    Frameworks de GraphQL

    05:11 min
  • 23
    Conectemos el frontend

    Conectemos el frontend

    01:26 min
schoolTomar examen

Construyendo una query simple con Apollo Server

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads

Comentarios24

Mauricio Combariza

Mauricio Combariza

Estudiante
Hace 5 años
Francisco Ponce

Francisco Ponce

Estudiante
Hace 5 años
    Giuseppe Ramirez

    Giuseppe Ramirez

    Estudiante
    Hace 5 años
    Francisco Ponce

    Francisco Ponce

    Estudiante
    Hace 5 años
Mauricio Combariza

Mauricio Combariza

Estudiante
Hace 5 años
Luciano Cavallo

Luciano Cavallo

Estudiante
Hace 5 años
Marcelo J. Gracia

Marcelo J. Gracia

Estudiante
Hace 5 años
    Jonathan 🦑 Alvarez

    Jonathan 🦑 Alvarez

    Profesor
    Hace 5 años
Yeison Antonio Arango Tamayo

Yeison Antonio Arango Tamayo

Estudiante
Hace 5 años
    Yeison Antonio Arango Tamayo

    Yeison Antonio Arango Tamayo

    Estudiante
    Hace 5 años
    Giuseppe Ramirez

    Giuseppe Ramirez

    Estudiante
    Hace 5 años
Andrés Esteban Rodríguez Jiménez

Andrés Esteban Rodríguez Jiménez

Estudiante
Hace 3 años
José Luis Encastin Flores

José Luis Encastin Flores

Estudiante
Hace 4 años
Miguel Hernández

Miguel Hernández

Estudiante
Hace 5 años
    Miguel Hernández

    Miguel Hernández

    Estudiante
    Hace 5 años
Juan Camilo Cortes

Juan Camilo Cortes

Estudiante
Hace 5 años
Miguel Ángel Murillo Ramírez

Miguel Ángel Murillo Ramírez

Estudiante
Hace 4 años
    Jonathan 🦑 Alvarez

    Jonathan 🦑 Alvarez

    Profesor
    Hace 4 años
José Luis Encastin Flores

José Luis Encastin Flores

Estudiante
Hace 4 años
Alexander Coronell

Alexander Coronell

Estudiante
Hace 2 años
Maria Jose Garcia Martinez

Maria Jose Garcia Martinez

Estudiante
Hace 2 años
Jorge Grullon

Jorge Grullon

Estudiante
Hace 3 años
Juan Jose Rivas Álvarez

Juan Jose Rivas Álvarez

Estudiante
Hace 3 años
    Juan Jose Rivas Álvarez

    Juan Jose Rivas Álvarez

    Estudiante
    Hace 3 años
José Luis Encastin Flores

José Luis Encastin Flores

Estudiante
Hace 4 años
Emmanuel Rodríguez

Emmanuel Rodríguez

Estudiante
Hace 5 años
    Gregory Antonio Iscala Caicedo

    Gregory Antonio Iscala Caicedo

    Estudiante
    Hace 4 años
    Emmanuel Rodríguez

    Emmanuel Rodríguez

    Estudiante
    Hace 4 años
Diego Vergara

Diego Vergara

Estudiante
Hace 4 años
José Carlos Quichiz Santome

José Carlos Quichiz Santome

Estudiante
Hace 4 años

Perfecto, ya lo subio: Esta es la pagina

https://github.com/jonalvarezz/platzi-graphql-fullstack
yarn --cwd add apollo-server graphql nodemon ts-node

Es una maravilla lo que hace la flag --cwd, ya que especifica el directorio donde queremos ejecutar alguna opción de yarn

Hola querido amigo :green_heart: ya subí el repo echale un ojito.

¡Mil gracias, Giu!

Le doy una revisada conforme avance el curso, aunque tiene buena pinta.

Para los que como a mi les cueste ver lo que escribe, este es el comando

yarn --cwd api add apollo-server graphql nodemon ts-node

Con esta añade estes paquetes dentro de la carpeta api

Buenas aquí mi solución al reto: 1ero cree un archivo ./graphql/schemas.graphql:

type Avocado { id: ID! name: String! description: String! image: String price: Int } input InputAvocado { name: String! description: String! image: String price: Int } type Query { "Devuelve los Avocados" getAvos: [Avocado] "Devuelve la info del servidor" info: String! } type Mutation { "Crea un Avocado" createAvo(input: InputAvocado!): Avocado }

Luego en index.ts (notesé que el newId es literalmente cualquier cosa, para el reto únicamente):

import { ApolloServer } from 'apollo-server'; const { readFileSync } = require('fs'); const { join } = require('path'); const typeDefs = readFileSync( join(__dirname, 'graphql', 'schemas.graphql'), 'utf-8' ); const avos = [ { id: 1, name: 'Avocado 1', description: 'Avocado 1 description', image: 'https://unsplash.com/640', price: 5, }, { id: 2, name: 'Avocado 2', description: 'Avocado 2 description', image: 'https://unsplash.com/640', price: 7, }, { id: 3, name: 'Avocado 3', description: 'Avocado 3 description', image: 'https://unsplash.com/640', price: 4, }, ]; // 2 - resolvers const resolvers = { Query: { info: () => `This is the API of Platzi Node GraphQL`, getAvos: () => avos, }, Mutation: { createAvo: (root: any, { input }: any) => { const newId = Math.floor(Math.random() * 100); const newAvo = { ...input, id: newId }; avos.push(newAvo); return newAvo; }, }, }; // 3 - iniciar servidor const server = new ApolloServer({ typeDefs, resolvers, }); server.listen().then(({ url }) => console.log(`Server is running on${url}`));

Que versión tiene el profesor de node en su notebook?, Xq eso hace que graphql no baje la ulitma, en mi caso funcionó con la 15.3.0, no aśi con la 16.0.1 o superior que marca el package.json

Hola hola Marcelo, se hizo en la versión LTS de Node.js 14!

Alguien tiene este error?

error graphql@16.2.0: The engine "node" is incompatible with this module. Expected version "^12.22.0 || ^14.16.0 || >=16.0.0". Got "15.13.0" error Found incompatible module. info Visit https://yarnpkg.com/en/docs/cli/add for documentation about this command.

Si alguien tuvo este error solo deben cambiar la version de graphql

yarn --cwd api add apollo-server graphql@15.3.0 nodemon ts-node

Hola, Yeison. El repo está arriba, mira si al compararlo hay algo que se haya saltado :)

Construyendo una query simple con Apollo Server

Actualmente **apollo-server** se encuentra deprecado, en su lugar, debemos instalar el siguiente paquete:

npm install @apollo/server

Ahora, para poder correr nuestro servidor de GraphQL, debemos hacerlo de la siguiente forma:

import { ApolloServer } from '@apollo/server'; import { startStandaloneServer } from '@apollo/server/standalone'; const { loadFiles } = require('@graphql-tools/load-files'); const resolvers = { Query: { info: () => `El servidor envía queries correctamente :3` } } const listen = async (port?: number):Promise<void> => { const server = new ApolloServer({ typeDefs: await loadFiles('./src/**/*.gql'), resolvers }); const { url } = await startStandaloneServer(server, { listen: { port: port || 4000 }, }); console.log(`🚀 Server ready at: ${url}`); }; listen();

Ya luego, en nuestro archivo de **schemas.gql** podremos definir ese **typeDefs**, que va a utilizar nuestro servidor. Te lo dejo a ti.

Y así creas tu server en GraphQL.

Por alguna razón no me funcionaba el comando "--cwd" para instalar las dependencias ni para correr el script de api, pero investigando un poco descubrí que se pueden sustituir por laos siguientes comandos:

  • yarn --cwd api add apollo-server graphql nodemon ts-node => yarn workspace api add pollo-server graphql nodemon ts-node
  • yarn --cwd api dev => yarn workspace api run dev

Espero les sirva

Mi solución basada en los tipos de graphql: Types:

  • Avocado: id: ID, name: String, sku: String, image: String, price: Float, attributes: AvocadoAttributes.
  • AvocadoAttributes: description: String, shape: String, hardiness: Float, taste: String
  • Cart: id: ID, avocado_id: ID

Query:

  • getAvocados(): [Avocado]

Mutations:

  • createAvocado
  • deleteAvocado (ID)

Al final quedo algo asi, no se mucho de GraphQL pero poco a poco voy entendiendo

code.png

Lo hice basándome en el archivo data.js de la carpeta database del proyecto platzi-nextjs del profe

link

Por si alguien al crear el branch se equivoca de nombre lo pueden borrar desde main con este codigo .

git branch -D <name branch>

Es correcto decir que el paquete apollo-server es una alternativa al paquete express-graphql

Lo es. Apollo-server ya trae un Express dentro 😄

Hola, me aparece este error al aplicar: "yarn --cwd api add apollo-server graphql@15.3.0 nodemon ts-node"

Internal Error: ENOENT: no such file or directory, lstat '/Users/macbookair/Desktop/Courses/platzi-fullstack/platzi-graphql-fullstack/api/api'

¿Alguien sabe a què se debe?

vuestro sistema de reproducción de vídeo es si queda colgado muchísimas veces esto es un Samsung Galaxy S23 tengo cobertura 5g pero es muy inestable y cansa muchísimo porque yo los cursos los escucho como si fueran podcast

A alguien mas le salió este error

yarn

yarn install v1.22.21

[1/5] 🔍 Validating package.json...

error platzi-graphql-fullstack@0.1.0: The engine "node" is incompatible with this module. Expected version "14.x". Got "20.10.0"

error Found incompatible module.

info Visit for documentation about this command.

Muy buenas a todos, al momento de poner yarn en consola me dice que yarn no es un comando el cual se pueda reconocer

Alguien sabe porpque puede pasar eso?

ya resolvi mi error, tenia que abrirlo desde la consola de git bash no desde la consola de windows. No se si a los demas les funcione pero a mi eso fue lo que hizo que me funcionara

Si al hacer yarn install te aparecen màs de 300 nuevos archivos, son parte de la configuración de yarn, y para evitar subirlos a tu repo puedes añadir las siguientes lineas a tu .gitignore:

yarn

.pnp.* .yarn/* !.yarn/patches !.yarn/plugins !.yarn/releases !.yarn/sdks !.yarn/versions

Me gustó su terminal ✨

Excelente introducción donde se va tomando su tiempo en varios detalles importantes.

Complemento este video compartiendo el enlace a la documentación de Apollo Server 📚

esa terminal está disponible en Windows?

Es correcto, la configuración cae sobre WSL mediante zsh + OhMyZsh.

Mi solución a la parte de Schemas y Resolvers Github

const typeDefs = ` type Query { info(message:String):String! avo(id:ID!):Avo avos:[Avo!]! } type Avo{ id:String! name:String! shape:String! hardiness:String! taste:String! description:String! sku:String! image:String! price:Float! } ` // 2 resolvers const resolvers = { Query: { info: (_: any, args: any) => `This is my message ${args.message}`, avo: (_: any, args: any) => { console.log(args.id); return { id: `${args.id}`, name: 'Super avos', shape: 'cualquiera', hardiness: 'nose', taste: 'rico', description: 'palta rica', sku:"NH#^@", image:"https://localhost:4000", price:23.3 } }, avos: (_: any, args: any) => { return [ { id: '23ds', name: 'Super avos', shape: 'cualquiera', hardiness: 'nose', taste: 'rico', description: 'palta rica', sku:"NH#^@", image:"https://localhost:4000", price:23.3 }, { id: '23dsss23', name: 'Super avos', shape: 'cualquiera', hardiness: 'nose', taste: 'rico', description: 'palta rica', sku:"NH#^@", image:"https://localhost:4000", price:23.3 } ] }, }, }

Para usar los workspaces con NPM, lo usamos de la siguiente manera:

npm [command] --workspace=nombre_workspace