CursosEmpresasBlogLiveConfPrecios

Fetch POST

Clase 14 de 26 • Curso de Asincronismo con JavaScript

Clase anteriorSiguiente clase

Contenido del curso

Introducción
  • 1
    Lo que aprenderás en este curso

    Lo que aprenderás en este curso

    01:34
  • 2
    Qué es el asincronismo

    Qué es el asincronismo

    09:25
  • 3
    Event Loop

    Event Loop

    11:13
  • 4
    Iniciando a programar con JavaScript

    Iniciando a programar con JavaScript

    02:59
Callbacks
  • 5
    Configuración

    Configuración

    10:23
  • 6
    Qué son los Callbacks

    Qué son los Callbacks

    14:56
  • 7

    Playground: Ejecuta un callback con 2s de demora

    00:00
  • 8
    XMLHTTPRequest

    XMLHTTPRequest

    15:03
  • 9
    Fetch data

    Fetch data

    17:44
  • 10
    Callback hell

    Callback hell

    06:56
Promesas
  • 11
    Qué son las promesas

    Qué son las promesas

    11:54
  • 12

    Playground: Crea una función de delay que soporte asincronismo

    00:00
  • 13
    Fetch

    Fetch

    16:12
  • 14
    Fetch POST

    Fetch POST

    14:55
Async Await
  • 15
    Funciones asíncronas

    Funciones asíncronas

    10:07
  • 16
    Try and catch

    Try and catch

    11:51
  • 17

    Playground: Captura el error de una petición

    00:00
  • 18
    ¿Cómo enfrentar los errores?

    ¿Cómo enfrentar los errores?

    03:42
Generadores
  • 19
    Generators

    Generators

    08:06
Proyecto CV
  • 20
    Proyecto del curso

    Proyecto del curso

    11:48
  • 21
    Consumiendo API

    Consumiendo API

    19:24
  • 22
    Desplegando el proyecto

    Desplegando el proyecto

    16:45
  • 23

    Playground: Crea una utilidad para hacer peticiones

    00:00
Nunca pares de crear
  • 24
    Conclusión

    Conclusión

    03:09
  • 25
    ¿Qué camino tomar para seguir aprendiendo?

    ¿Qué camino tomar para seguir aprendiendo?

    04:12
  • 26

    Autoevaluación de Proyecto: Creación de Landing Page

    00:44
    Santiago Lopera Naranjo

    Santiago Lopera Naranjo

    student•
    hace 3 años

    Si quieres profundizar mas en estos temas de fetch, en Platzi el profe JuanDa tiene un saga de tres cursos de basico a profesional en el tema de peticiones HTTP.

    Si te interesa aquí tienen dichos cursos: https://platzi.com/cursos/api/ https://platzi.com/cursos/api-practico/ https://platzi.com/cursos/api-profesional/

      Dario Paladines

      Dario Paladines

      student•
      hace 3 años

      Muy recomendado que tomen esos cursos para que entiendan en cuanto a peticiones a api, endpoint, queryparameters y los métodos GET, POST, PUT-PATCH, y DELETE, y sobretodo lleven el asincronismo desde la teoria hasta la práctica. Yo estoy ya haciendo el último, y si se entiende un poco mejor este curso después de haber tomado esos. Ya que la primera vez que vi este curso estuve un poco mucho perdido.

      Carlos Abad Garcia Perez

      Carlos Abad Garcia Perez

      student•
      hace 3 años

      Entonces recomienda mejor tomar esos cursos antes de este?

    Maria Gabriela Rodriguez Cuevas

    Maria Gabriela Rodriguez Cuevas

    student•
    hace 3 años

    📂 𝗖𝗹𝗮𝘀𝗲 #𝟭𝟮: 𝗙𝗲𝘁𝗰𝗵 𝗣𝗢𝗦𝗧 𝟭𝟮/𝟮𝟭 📂 . ++Repasando algunas de las característica del protocolo http:++ .

    Los verbos indican acciones, estás acciones están asociadas a peticiones y recursos. En línea general sirve para la manipulación de recursos cliente/servidor. Los códigos de estados, los códigos son valores números que tienen un valor semántico.

    . ++Algunos Verbos http son:++ . GET → Sirve para solicitar recurso. POST → Sirve para la creación de recursos en el servidor. PUT → Sirve actualizar por completo un recurso. DELETE → Sirve para eliminar un recurso. . 🔨 En el ejemplo de la clase se usa POST para guardar (enviar a la API) información en lugar de obtener con GET (recibir). . ⚠️ Hay permisos que se deben tomar en cuenta para que el intercambio sea seguro, hay que especificar el modo (mode), aquí se indica si se permite solicitudes de origen cruzado. . 🔀 ++¿Qué es un origen cruzado?++ . Un origen tiene dominio/protocolo/puerto, un origen cruzado denominado “++Cross Origin++” es la palabra que se utiliza para denominar el tipo de peticiones que se realizan a un dominio diferente del dominio de origen desde donde se realiza la petición. Así que si se coloca cors, indica que se permiten ciertas solicitudes predeterminadas de origen cruzado como GET y POST para salvaguardar y evitar manipulaciones maliciosas. En el enlace detallan más sobre el concepto de Cors: aquí .

    • Ir a VSC, en la ruta src/promise crear el archivo challenge-post.js
    • El código queda así (está comentado):
    import fetch from 'node-fetch'; const API = 'https://api.escuelajs.co/api/v1'; function postData(urlApi, data) { //ya no se solicita informarción si no se guardará información const response = fetch(urlApi, { method: 'POST', //tiene que ir en mayúscula mode: 'cors', //cors es el permiso que va a tener, por defecto va estar siempre en cors credentials: 'same-origin', //es opcional headers:{ 'Content-Type': 'application/json' //necesario indicar que lo que se está enviando es de tipo json }, body: JSON.stringify(data) //el método JSON.stringify() convierte un objeto o valor de JavaScript en una cadena de texto JSON }); return response; } //En https://fakeapi.platzi.com/doc/products se consigue la estructura de como debe ser el objeto que se quiere crear con POST const data = { "title": "Nunca pares de aprender", "price": 2, "description": "A description", "categoryId": 1, "images": ["https://placeimg.com/640/480/any"] } //podemos usar el postData como una promesa y con .then obtener la respuesta como un objeto json y mostrarlo después en la consola postData(`${API}/products`, data) .then(response => response.json()) .then(data => console.log(data));

    . 🖥️ ++¿Cómo ver la salida después del POST?++

    • En el OUTPUT de la consola de VSC si todo está OK no debería salir un 400 (Bad Request).
    • Para ver el objeto creado en el navegador, copiamos la dirección: https://api.escuelajs.co/api/v1/products/ y colocamos al final el número arrojado por la id del OUTPUT, si el id es 271, sería: https://api.escuelajs.co/api/v1/products/271 .

    🎨 ++Ejemplo para actualizar un objeto con PUT:++

    //Con PUT para actualizar un objeto function putData(urlApi, dataUpdate) { const response = fetch(urlApi, { method: 'PUT', mode: 'cors', credentials: 'same-origin', headers:{ 'Content-Type': 'application/json' }, body: JSON.stringify(dataUpdate) }); return response; } const dataUpdate = { "title": "Se puede cambiar tambien otras caracteristicas", "price": 10 // no es necesario colocar todas las características del objeto, solo las que se cambiarán } putData(`${API}/products/271`, dataUpdate) //se debe colocar el id del objeto que se quiere modificar .then(response => response.json()) .then(dataUpdate => console.log(dataUpdate));

    . 🗑️ ++Ejemplo para eliminar un objeto con DELETE:++

    //Eliminar un objeto indicando el id con DELETE function deleteData(urlApi) { //no es necesario pasar la data const response = fetch(urlApi, { method: 'DELETE', mode: 'cors', credentials: 'same-origin', headers:{ 'Content-Type': 'application/json' } //no es necesario especificar el body }); return response; } const idNumber = 271; //se debe colocar el id del objeto qu se quiere modificar deleteData(`${API}/products/${idNumber}`) //no es necesario pasar data .then(() => { console.log(`Borrado ${idNumber}`); //es opcional imprimir en consola });
      Deniss Bonilla Paredes

      Deniss Bonilla Paredes

      student•
      hace 3 años

      Buenísimo tu ejemplo para eliminar un producto Gracias :)

      Yezid Garcia Medina

      Yezid Garcia Medina

      student•
      hace 3 años

      Excelentes apuntes :-) y ejemplo de los dos casos adicionales

    Miguel Enrique Velásquez Millán

    Miguel Enrique Velásquez Millán

    student•
    hace 3 años

    Pensaste que era un producto cualquiera de la Fake Store API de Platzi, pero era yo: ¡DIO!

    Ja ja ja ja, espero que a nadie le moleste, me hizo mucha gracia la idea de añadir el meme de DIO como producto y al final sí lo terminé añadiendo 🤣. Su ID es el 215. · Ojalá no lo borren, sería cool que se pudiera mantener y que los futuros estudiantes que hagan el curso les salga DIO cuando hagan su primer GET, ja ja ja ja ja, sería muy chistoso 😂. · Pero bueno, iguamente asumo que es muy probable que lo terminen borrando en algún momento como ya ha pasado con otros productos por el mero hecho de que, nosotros como estudiantes de este curso, de seguro en algún momentito intentaremos probar a usar el DELETE con algún producto random para poner en práctica lo de las clases (y cabe la posibilidad de que en algún momentito DIO termine siendo ese producto random a borrar)... Aunque estaría muy cool que no sucediera, je je 😊. · ++Output del .json de DIO como producto:++

    { title: "¡DIO!", price: 710, description: "Pensaste que era un producto cualquiera de la Fake Store API de Platzi, pero era yo: ¡DIO!", images: ["https://i.imgur.com/USxXB5a.jpg"], category: { id: 5, name: "Others", keyLoremSpace: "random", image: "https://api.lorem.space/image?w=640&h=480&r=407" }, id: 215 }
      Miguel Enrique Velásquez Millán

      Miguel Enrique Velásquez Millán

      student•
      hace 3 años

      Acabo de revisar y... Ya lo borraron, ja ja ja ja ja 🤣. Chale... Pobre DIO, no duró ni día, ja ja ja.

      Servio Gabriel Pachard Velez

      Servio Gabriel Pachard Velez

      student•
      hace 3 años

      jajajaja si ya lo borraron

    Charles Duck Castillo Rosas

    Charles Duck Castillo Rosas

    student•
    hace 3 años
    import fetch from "node-fetch"; const API = "https://api.escuelajs.co/api/v1"; function postData(urlApi, data) { const response = fetch(urlApi, { method: "POST", mode: "cors", credentials: "same-origin", headers: { "Content-Type": "application/json", }, body: JSON.stringify(data), }); return response; } const data = { title: "New Product Course", price: 9999, description: "A description", categoryId: 1, images: ["https://placeimg.com/640/480/any"], }; postData(`${API}/products`, data) .then((response) => response.json()) .then((data) => console.log(data));
    Alfredo Olmedo

    Alfredo Olmedo

    student•
    hace 3 años

    CORS (Cross-Origin Resource Sharing) es un sistema, que consiste en transmitir encabezados HTTP , que determina si los navegadores bloquean el acceso del código JavaScript frontend a las respuestas para solicitudes de origen cruzado.

    La política de seguridad del mismo origen prohíbe el acceso de orígenes cruzados a los recursos. Pero CORS brinda a los servidores web la capacidad de decir que desean optar por permitir el acceso de origen cruzado a sus recursos. MDN

    Bryan David Castañeda Aranzales

    Bryan David Castañeda Aranzales

    student•
    hace 3 años

    El hacer el mismo problema con diferente herramientas genera que veamos un panorama más amplio y que todos los dev que vean esto puedan seleccionar una u otra opción dependiendo de su caso específico.

    Fidel Parabacuto

    Fidel Parabacuto

    student•
    hace 3 años

    Buenísimo este curso. Les dejo cómo apliqué el método DELETE para eliminar el item y el método PUT para modificar el precio

    DELETE _ PUT.png

      Juan Guillermo Perez Cardozo

      Juan Guillermo Perez Cardozo

      student•
      hace 3 años

      hey que buen aporte

    Ramsés Castañeda

    Ramsés Castañeda

    student•
    hace 3 años

    Existen métodos creados para diferentes fines y que se pueden usar (en este caso, esta API):

    • 'Get': Para obtener

    • 'Post': Enviar

    • 'Put': Actualizar

    • 'Delete' Para eliminar.

    Eduer Pallares Jiménez

    Eduer Pallares Jiménez

    student•
    hace 3 años

    UPDATE:

    import fetch from "node-fetch"; const API = 'https://api.escuelajs.co/api/v1/products/'; function updateData(urlApi, data) { return fetch( urlApi, { method: 'PUT', mode: 'cors', credentials: 'same-origin', headers: {'Content-Type': 'application/json'}, body: JSON.stringify(data), }, ); } const dataUpdate = { title: 'Red shirt updated', price: 300 }; updateData(`${API}217`, dataUpdate) .then(responde => responde.json()) .then(data => console.log(data)) .catch(error => console.error(error));
    Marcos Montiel Cruz

    Marcos Montiel Cruz

    student•
    hace 3 años

    Estoy maravillado con este curso, soy un novato pero sin duda estoy entendiendo mucho mejor este tema con este curso. Hice update y delete de la siguiente forma y funcionó a la primera :D

    Update (solo cambié 'POST' por 'PUT'):

    const updateData = (urlApi, data) => { const response = fetch(urlApi, { method: 'PUT', mode: 'cors', credentials: 'same-origin', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data), }); return response; };

    Y para Delete quité headers y body puesto que lo unico que mandamos es el ID en la url para eliminar el producto de acuerdo con la documentación.

    const deleteData = (urlApi) => { const response = fetch(urlApi, { method: 'DELETE', mode: 'cors', credentials: 'same-origin', }); return response; };
    Juan Carlos Domínguez Pérez

    Juan Carlos Domínguez Pérez

    student•
    hace 3 años

    hare un bucle que agregue unos 1000 registros

      Juan Carlos Domínguez Pérez

      Juan Carlos Domínguez Pérez

      student•
      hace 3 años

      solo tardo 12 seg ![](

      12 seg.jpg

    Milagro García

    Milagro García

    student•
    hace 3 años

    No entiendo nada

    Porfirio González López

    Porfirio González López

    student•
    hace 3 años

    Apunte en Notion

    clase 14.jpg
    Diego Marin Lopez

    Diego Marin Lopez

    student•
    hace 2 años

    No me gusta para nada este tipo como explica

    Critica constructiva

    Eduer Pallares Jiménez

    Eduer Pallares Jiménez

    student•
    hace 3 años

    DELETE:

    import fetch from "node-fetch"; const API = 'https://api.escuelajs.co/api/v1/products/'; function deleteData(urlApi, data) { return fetch( urlApi, { method: 'DELETE', mode: 'cors', credentials: 'same-origin', headers: {'Content-Type': 'application/json'}, body: JSON.stringify(data), }, ); } deleteData(`${API}214`) .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error(error));
      Claudio Alexis Sepúlveda Valdebenito

      Claudio Alexis Sepúlveda Valdebenito

      student•
      hace 3 años

      Hola, te propongo lo siguiente, sin data:

      challenge-delete.png

      Eduer Pallares Jiménez

      Eduer Pallares Jiménez

      student•
      hace 3 años

      @claudioasv buena propuesta

    Gerson Estuardo Alvarado Hernández

    Gerson Estuardo Alvarado Hernández

    student•
    hace 3 años

    En Firefox se pueden ver los JSON de forma más ordenada y ver algunos detalles extra sin instalar ninguna extensión.

    JSON-Firefox.png

    Víctor Estrada

    Víctor Estrada

    student•
    hace 3 años

    Se me ocurrió hacer este código para practicar get y post

    'use strict' /* Se está utilizando fetch 2.6.11 debido a que la versión 3 no tiene compatibilidad con commonjs. Si se trata de obtener el node-fetch de la forma enseñada en el curso, hay errores debido a que también se está usando un require más abajo para poder conseguir datos desde la consola */ const fetch = require('node-fetch') const prompt = require('prompt-sync')(); const API = 'https://api.escuelajs.co/api/v1'; //función para obtener datos const fetchData = (urlAPI)=>{ return fetch(urlAPI); } //función para enviar datos const PostData = (urlAPI, data)=>{ const response = fetch(urlAPI, { method: 'POST', mode: 'cors', credentials: 'same-origin', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }); return response; } //lógica let option = prompt('Would you like to use GET or POST?'); while(option.toUpperCase() != 'GET' && option.toUpperCase() != 'POST'){ console.log("You need to specify if we're gonna be using GET or POST"); option = prompt('Would you like to use GET or POST?') } if(option.toUpperCase() === 'GET'){ console.log("Please specify the ID of the product you'd like to get. "); let ID = parseInt(prompt("ID: ")); while(isNaN(ID)==true || ID<0){ console.log("You need to specify the ID of the product you'd like to see. It cannot be negative values"); console.log("Please specify the ID of the product you'd like to get. "); ID = parseInt(prompt("ID: ")); } fetchData(`${API}/products/${ID}`).then((response)=>{ return response.json() }).then((showProduct)=>{ console.log(showProduct) }).catch((error)=>{ console.log(error) }).finally(()=>{ console.log("END") }) }else{ console.log("Please spicify the data of the product you'd like to send to the API."); let name = prompt('name: '); let price = prompt('price: '); while(isNaN(price)==true || price < 0){ console.log("You need to set a positive numerical value as the price"); price = prompt('price: '); } const data = { "title": name, "price": price, "description": "A description", "categoryId": 1, "images": ["https://placeimg.com/640/480/any"] }; PostData(`${API}/products`, data).then((conversion)=>{ return conversion.json(); }).then((response)=>{ console.log(response); }).catch((error)=>{ console.log(error) }).finally(()=>{ console.log("The data has been succesfully sent to the API") }) }

    Resultados

    Corriendolo con GET

    Corriendolo con POST

    Juan Felipe Alvarez Rios

    Juan Felipe Alvarez Rios

    student•
    hace 3 años

    Tengo la duda en el ID, ¿por que si cambiamos el Tiitle y el price, trae cómo ID lo que se puso en ambos campos?

    Emanuel Alvarez

    Emanuel Alvarez

    student•
    hace 3 años

    Tengo esta duda. Por lo que vi esta es una API publica y cualquiera puede hacer posts en ella. Entonces, queda un registro de quien ha hecho cada post? Algún nombre o ip?

      Juan Camilo Suarez

      Juan Camilo Suarez

      student•
      hace 2 años

      Estamos haciendo un post a la api de forma local, creo que tiene mucha más complejidad para hacerle un cambio a la api

    Juliette Villarroel

    Juliette Villarroel

    student•
    hace un año

    ¡Me gustó mucho esta clase! me agobié un poco al principio con tanta información pero con algo de tiempo y leer mucho fui capaz de hacer ambas cositas...

    Muy bien, para hacer el UPDATE

    //ACTUALIZAR LOS DATOS DEL PRODUCTO const updatePost = (urlApi, data2) => { const response = fetch(urlApi, { method: 'PUT', mode: 'cors', credentials: 'same-origin', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data2) }); return response; } const dataUpdate = { "id": 107, "title": "New cute chair UPDATED", "price": 88.99 } updatePost(`${API}/products/${dataUpdate.id}`, dataUpdate) .then(response => response.json()) .then(dataUpdate => console.log(dataUpdate)) .catch(error => console.error('Error', error)); ```//ACTUALIZAR LOS DATOS DEL PRODUCTO const updatePost = (urlApi, data2) => {    const response = fetch(urlApi, {        method: 'PUT',        mode: 'cors',        credentials: 'same-origin',        headers: {            'Content-Type': 'application/json'        },        body: JSON.stringify(data2)     });    return response;} const dataUpdate = {    "id": 107,    "title": "New cute chair UPDATED",    "price": 88.99} updatePost(`${API}/products/${dataUpdate.id}`, dataUpdate)    .then(response => response.json())    .then(dataUpdate => console.log(dataUpdate))    .catch(error => console.error('Error', error)); y para hacer el **DELETE** ```js const deleteData = (urlApi) => { const response = fetch(urlApi, { method: 'DELETE', mode: 'cors', credentials: 'same-origin', headers: { 'Content-Type': 'application/json' } }); return response; } const deleteUpdate = { "id": 107, } deleteData(`${API}/products/${deleteUpdate.id}`) .then(response => { if (response.ok) { console.log(`Producto con ID ${id} eliminado correctamente.`); } else { console.error('Error al eliminar el producto:', response.statusText); } }) .catch(error => console.error('Error:', error)); ```const deleteData = (urlApi) => {    const response = fetch(urlApi, {        method: 'DELETE',        mode: 'cors',        credentials: 'same-origin',        headers: {            'Content-Type': 'application/json'        }    });    return response;} const deleteUpdate = {    "id": 107,} deleteData(`${API}/products/${deleteUpdate.id}`)    .then(response => {        if (response.ok) {            console.log(`Producto con ID ${id} eliminado correctamente.`);        } else {            console.error('Error al eliminar el producto:', response.statusText);        }    })    .catch(error => console.error('Error:', error));

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