CursosEmpresasBlogLiveConfPrecios

Construyendo una query simple con Apollo Server

Clase 3 de 23 • Curso Avanzado de Node.js con GraphQL, Apollo Server y Prisma

Clase anteriorSiguiente clase

Contenido del curso

Introducción
  • 1
    ¿Por qué GraphQL?

    ¿Por qué GraphQL?

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

    Arquitectura backend con Node.js y GraphQL

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

    Construyendo una query simple con Apollo Server

    14:49
  • 4
    Scalars, filtros y queries avanzadas

    Scalars, filtros y queries avanzadas

    18:57
Base de datos y ORM
  • 5
    ORMs, Prisma y automatización

    ORMs, Prisma y automatización

    02:53
  • 6
    Modelando la base datos y schema

    Modelando la base datos y schema

    12:57
  • 7
    Resolvers para mutaciones y filtros

    Resolvers para mutaciones y filtros

    20:28
  • 8
    Filtros en Prisma

    Filtros en Prisma

    13:24
  • 9
    Paginación y filtros avanzados

    Paginación y filtros avanzados

    10:46
  • 10
    Archivos estáticos

    Archivos estáticos

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

    Archivos estáticos con Express.js y Apollo Server

    09:18
Producción
  • 12
    Protección de recursos en GraphQL

    Protección de recursos en GraphQL

    20:57
  • 13
    Testing

    Testing

    17:12
  • 14

    Pruebas End to End: Estrategias y Herramientas Efectivas

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

    Preparando la app para producción

    15:54
  • 16
    Preparando el servidor para Heroku

    Preparando el servidor para Heroku

    05:56
  • 17
    Introspección

    Introspección

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

    Bases de datos en producción

    08:37
  • 19
    Deploying

    Deploying

    15:52
Próximos pasos
  • 20
    Reto: guestbook

    Reto: guestbook

    02:53
  • 21
    Desventajas de GraphQL

    Desventajas de GraphQL

    08:18
  • 22
    Frameworks de GraphQL

    Frameworks de GraphQL

    05:11
  • 23
    Conectemos el frontend

    Conectemos el frontend

    01:26
    Mauricio Combariza

    Mauricio Combariza

    student•
    hace 4 años

    Perfecto, ya lo subio: Esta es la pagina

    https://github.com/jonalvarezz/platzi-graphql-fullstack
    Francisco Ponce

    Francisco Ponce

    student•
    hace 4 años
    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

      Giuseppe Ramirez

      Giuseppe Ramirez

      student•
      hace 4 años

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

      Francisco Ponce

      Francisco Ponce

      student•
      hace 4 años

      ¡Mil gracias, Giu!

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

    Mauricio Combariza

    Mauricio Combariza

    student•
    hace 4 años

    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

    Luciano Cavallo

    Luciano Cavallo

    student•
    hace 4 años

    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}`));
    Marcelo J. Gracia

    Marcelo J. Gracia

    student•
    hace 4 años

    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

      Jonathan 🦑 Alvarez

      Jonathan 🦑 Alvarez

      teacher•
      hace 4 años

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

    Yeison Antonio Arango Tamayo

    Yeison Antonio Arango Tamayo

    student•
    hace 4 años

    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.
      Yeison Antonio Arango Tamayo

      Yeison Antonio Arango Tamayo

      student•
      hace 4 años

      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
      Giuseppe Ramirez

      Giuseppe Ramirez

      student•
      hace 4 años

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

    Andrés Esteban Rodríguez Jiménez

    Andrés Esteban Rodríguez Jiménez

    student•
    hace 2 años

    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.

    José Luis Encastin Flores

    José Luis Encastin Flores

    student•
    hace 3 años

    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

    Miguel Hernández

    Miguel Hernández

    student•
    hace 4 años

    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

      Miguel Hernández

      Miguel Hernández

      student•
      hace 4 años

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

      link

    Juan Camilo Cortes

    Juan Camilo Cortes

    student•
    hace 4 años

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

    git branch -D <name branch>
    Miguel Ángel Murillo Ramírez

    Miguel Ángel Murillo Ramírez

    student•
    hace 3 años

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

      Jonathan 🦑 Alvarez

      Jonathan 🦑 Alvarez

      teacher•
      hace 3 años

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

    José Luis Encastin Flores

    José Luis Encastin Flores

    student•
    hace 3 años

    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?

    Alexander Coronell

    Alexander Coronell

    student•
    hace 9 meses
    Maria Jose Garcia Martinez

    Maria Jose Garcia Martinez

    student•
    hace un año

    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

    Jorge Grullon

    Jorge Grullon

    student•
    hace 2 años

    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 https://yarnpkg.com/en/docs/cli/install for documentation about this command.

    Juan Jose Rivas Álvarez

    Juan Jose Rivas Álvarez

    student•
    hace 2 años

    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?

      Juan Jose Rivas Álvarez

      Juan Jose Rivas Álvarez

      student•
      hace 2 años

      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

    José Luis Encastin Flores

    José Luis Encastin Flores

    student•
    hace 3 años

    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

    Emmanuel Rodríguez

    Emmanuel Rodríguez

    student•
    hace 4 años

    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 📚

      Gregory Antonio Iscala Caicedo

      Gregory Antonio Iscala Caicedo

      student•
      hace 3 años

      esa terminal está disponible en Windows?

      Emmanuel Rodríguez

      Emmanuel Rodríguez

      student•
      hace 3 años

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

    Diego Vergara

    Diego Vergara

    student•
    hace 3 años

    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 } ] }, }, }
    José Carlos Quichiz Santome

    José Carlos Quichiz Santome

    student•
    hace 3 años

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

    npm [command] --workspace=nombre_workspace

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