CursosEmpresasBlogLiveConfPrecios

Creando controladores

Clase 20 de 22 • Curso de APIs con .NET

Clase anteriorSiguiente clase

Contenido del curso

Introducción a API en .NET

  • 1
    Domina las API con .NET

    Domina las API con .NET

    02:50 min
  • 2
    Prerrequisitos

    Prerrequisitos

    02:36 min
  • 3
    ¿Qué es una API?

    ¿Qué es una API?

    04:22 min
  • 4
    ¿Qué es REST?

    ¿Qué es REST?

    08:18 min
  • 5
    Creando tu primera API con .NET

    Creando tu primera API con .NET

    04:04 min

Funcionamiento de una API en .NET

  • 6
    Consumiendo API desde Postman

    Consumiendo API desde Postman

    05:33 min
  • 7
    Análisis del template para APIs de .NET

    Análisis del template para APIs de .NET

    10:51 min
  • 8
    Atributos para verbos HTTP

    Atributos para verbos HTTP

    14:56 min
  • 9
    Manejo de rutas

    Manejo de rutas

    09:51 min
  • 10
    Minimal API vs. Web API

    Minimal API vs. Web API

    08:36 min

Arquitectura y configuración

  • 11
    ¿Qué son los middlewares?

    ¿Qué son los middlewares?

    08:54 min
  • 12
    Creando un nuevo middleware

    Creando un nuevo middleware

    14:46 min
  • 13
    Inyección de dependencias

    Inyección de dependencias

    16:43 min
  • 14
    Agregando Logging a API

    Agregando Logging a API

    09:25 min
  • 15
    Documentando API con Swagger

    Documentando API con Swagger

    08:03 min

Manipulación de datos con Entity Framework

  • 16
    Agregando librerías para Entity Framework

    Agregando librerías para Entity Framework

    04:38 min
  • 17
    Configuración de Entity framework y clases base

    Configuración de Entity framework y clases base

    08:31 min
  • 18
    Creación de servicios

    Creación de servicios

    12:24 min
  • 19
    Inyectando servicios como dependencia

    Inyectando servicios como dependencia

    04:43 min
  • 20
    Creando controladores

    Creando controladores

    Viendo ahora
  • 21
    Probando API con una base de datos SQL server

    Probando API con una base de datos SQL server

    14:03 min

Outro

  • 22
    Retrospectiva: APIs con .NET

    Retrospectiva: APIs con .NET

    03:05 min
  • Tomar el examen del curso
    • Felipe de Jesús Isidro

      Felipe de Jesús Isidro

      student•
      hace 3 años

      Como recomendación la propiedad del servicio debería ser declarada como protected y de solo lectura de la siguiente forma

      protected readonly ITareasService _tareasService;

      es un estándar que recomienda .Net

        Wilson Bienvenido Otaño Mateo

        Wilson Bienvenido Otaño Mateo

        student•
        hace un año

        Muchisimas gracias por ese aporte, vi que gpt lo uso una vez que se lo pedi, pero no sabia muchas gracias

      rafael malanco velazquez

      rafael malanco velazquez

      student•
      hace 3 años
      code.png
      Erick Alexander Cabrera González

      Erick Alexander Cabrera González

      student•
      hace 2 años

      Hola, para quienes al momento de compilar el codigo se les presenta el error:

      Unhandled exception. System.AggregateException: Some services are not able to be constructed (Error while validating the service descriptor ‘ServiceType: webapi.Services.ICategoriaService Lifetime: Scoped ImplementationType: webapi.Services.CategoriaService’: Unable to resolve service for type ‘webapi.TareasContext’ while attempting to activate ‘webapi.Services.CategoriaService’.) —> System.InvalidOperationException: Error while validating the service descriptor ‘ServiceType: webapi.Services.ICategoriaService Lifetime: Scoped ImplementationType: webapi.Services.CategoriaService’: Unable to resolve service for type ‘webapi.TareasContext’ while attempting to activate ‘webapi.Services.CategoriaService’.

      No es un error en el codigo en realidad, ya que al momento de seguir las clases siguientes y agregar el codigo que falta este "error" se soluciona. Muy segurmente no funciona por la falta de codigo adicional

        Diego Eduardo Téllez Contreras

        Diego Eduardo Téllez Contreras

        student•
        hace 2 años

        Efectivamente es normal que aparezca eso, falta configurar otras cositas en la siguiente clase! Este comentario debería estar más arriba!

        JUAN PABLO MAYORGA MENDIETA

        JUAN PABLO MAYORGA MENDIETA

        student•
        hace 2 años

        excelente, muchas gracias!

      Boris Vargas Paucara

      Boris Vargas Paucara

      student•
      hace 3 años

      CategoriaController

      using Microsoft.AspNetCore.Mvc; using webapi.Models; using webapi.Services; namespace webapi.Controllers; [Route("api/[controller]")] public class CategoriaController : ControllerBase { ICategoriaService categoriaService; public CategoriaController(ICategoriaService service) { categoriaService = service; } [HttpGet] public IActionResult Get() { return Ok(categoriaService.Get()); } [HttpPost] public IActionResult Post([FromBody] Categoria categoria) { categoriaService.Save(categoria); return Ok(); } [HttpPut("{id}")] public IActionResult Put(Guid id, [FromBody] Categoria categoria) { categoriaService.Update(id, categoria); return Ok(); } [HttpDelete("{id}")] public IActionResult Delete(Guid id) { categoriaService.Delete(id); return Ok(); } }

      TareaController

      using Microsoft.AspNetCore.Mvc; using webapi.Models; using webapi.Services; namespace webapi.Controllers; [Route("api/[controller]")] public class TareaController : ControllerBase { ITareaService tareaService; public TareaController(ITareaService service) { tareaService = service; } [HttpGet] public IActionResult Get() { return Ok(tareaService.Get()); } [HttpPost] public IActionResult Post([FromBody] Tarea tarea) { tareaService.Save(tarea); return Ok(); } [HttpPut("{id}")] public IActionResult Put(Guid id, [FromBody] Tarea tarea) { tareaService.Update(id, tarea); return Ok(); } [HttpDelete("{id}")] public IActionResult Delete(Guid id) { tareaService.Delete(id); return Ok(); } }
        Felipe Ignacio Inostroza Vega

        Felipe Ignacio Inostroza Vega

        student•
        hace 3 años

        Gracias por el aporte! :D

      Edgar Alexander Espinoza Gonzalez

      Edgar Alexander Espinoza Gonzalez

      student•
      hace 3 años

      porque no creamos como async los metodos en esta seccion, en teoria ese deberia ser el estandar o estoy errado?

        Miguel Teheran

        Miguel Teheran

        teacher•
        hace 3 años

        Es una excelente practica usar async, mejora mucho el rendimiento

        Daniel Valencia Alvarez

        Daniel Valencia Alvarez

        student•
        hace 9 meses

        ¿Es valido configurar todos los métodos (Get(), Post(), Put() y Delete()) como async o hay algúno que no deba tener esta configuración?

      Ronny Manuel De La Cruz Perez

      Ronny Manuel De La Cruz Perez

      student•
      hace 4 años

      Al crear lo controladores de esta manera, como puedo consumirlos para pasarlo a la vista?

        Miguel Teheran

        Miguel Teheran

        teacher•
        hace 4 años

        Debe cambiar el atributo de ApiController a Controller y puedes retornar la View indicando el nombre o ruta + nombre. Ejemplo "Views/Tareas/Index.cshtml" Mas info por acá: https://docs.microsoft.com/en-us/aspnet/core/mvc/views/overview?view=aspnetcore-6.0

        Juan Betancur

        Juan Betancur

        student•
        hace 3 años

        Miguel donde puedo encontrar el atributo ApiController?

      Carina Correjidor

      Carina Correjidor

      student•
      hace 3 años

      Hola una consulta desde un controlador puedo generar un redirect ? como lo definiria?

        Miguel Teheran

        Miguel Teheran

        teacher•
        hace 3 años

        Claro que si: return RedirectToRoute(new { controller = "User", action = "get" }); }

      Jaime Eduardo Falla Cardozo

      Jaime Eduardo Falla Cardozo

      student•
      hace 3 años

      Faltó explicar en el curso los niveles en una Api REST

      JUAN SEBASTIAN ORTIZ

      JUAN SEBASTIAN ORTIZ

      student•
      hace 20 días

      using Microsoft.AspNetCore.Mvc;

      using webapi.Models;

      using webapi.Services;

      namespace webapi.Controllers;

      [Route("api/[controller]")]

      public class TareaController : ControllerBase

      {

          private readonly ITareaService TareaService;

          public TareaController(ITareaService service)

          {

              TareaService = service;

          }

          [HttpGet]

          public IActionResult Get()

          {

              var tareas = TareaService.Get();

              return Ok(tareas);

          }

          [HttpPost]

          public async Task<IActionResult> Post([FromBody] Tarea tarea)

          {

              await TareaService.Save(tarea);

              return Ok();

          }

          [HttpPut("{id}")]

          public async Task<IActionResult> Put(Guid id, [FromBody] Tarea tarea)

          {

              await TareaService.Update(id, tarea);

              return Ok();

          }

          [HttpDelete("{id}")]

          public async Task<IActionResult> Delete(Guid id)

          {

              await TareaService.Delete(id);

              return Ok();

          }

      }

      Charly Johan Manrique Gómez

      Charly Johan Manrique Gómez

      student•
      hace 3 años

      buen día, de casualidad a alguno le funcionó el metodo put de la categoria ?
      he intentado de varias maneras pero no me funciona, inclusive agregue el FromRoute pensando que llegara hacer eso, en postman lo pongo con comillas dobles,simples,sin comillas pero me sigue saliendo (404) recurso no encontrado, con el servicio de post y get si me funciona correctamente.

      POSTMAN: https://localhost:7044/api/Categoria/Put/"fe2de405-c38e-4c90-ac52-da0540dfb402"

      SERVICIO: public async Task Update(Guid id, Categoria categoria) { var categoriaActual = context.Categorias.Find(id);

      if(categoriaActual != null) { categoriaActual.Nombre = categoria.Nombre; categoria.Descripcion = categoria.Descripcion; categoria.Peso = categoria.Peso; await context.SaveChangesAsync(); } }

      CONTROLADOR

      [HttpPut("{id}")] [Route("{action}")] public IActionResult Put([FromRoute]Guid id, [FromBody] Categoria categoria) { categoriaService.Update(id, categoria); return Ok(); }
        Miguel Teheran

        Miguel Teheran

        teacher•
        hace 3 años

        Elimina el atributo route, por otro lado manda el ID sin commillas y no le coloques Put simplemente llamalo de esta manera por el http verb put en postman: https://localhost:7044/api/Categoria/fe2de405-c38e-4c90-ac52-da0540dfb402

        Charly Johan Manrique Gómez

        Charly Johan Manrique Gómez

        student•
        hace 3 años

        Genial, me funciono correctamente muchas gracias.

      Juan Pablo Arano

      Juan Pablo Arano

      student•
      hace 3 años

      A diferencia tuya, cuando te saltan errores de que no importaste una libreria, a mi me marca error pero no me dice que libreria deberia importar. Como puedo solucionarlo? Alguna extension?

        Miguel Teheran

        Miguel Teheran

        teacher•
        hace 3 años

        debes instalar la extensión de C#, aveces igual toca esperar un rato a que la encuentre o reiniciar el Visual Code, para C# aveces salen estos problemas

      Edgar Alexander Espinoza Gonzalez

      Edgar Alexander Espinoza Gonzalez

      student•
      hace 3 años

      porque en esta seccion no creamos los metodos como async tengo entendido que es el estandar o estoy errado?

        Miguel Teheran

        Miguel Teheran

        teacher•
        hace 3 años

        Es una buena práctica hacerlos con Async ayuda mucho el performance

      Esteban Sánchez Ruiz

      Esteban Sánchez Ruiz

      student•
      hace 3 años

      Excelente buena explicacion como siempre!

      David Cubides Enciso

      David Cubides Enciso

      student•
      hace 3 años

      Bien explicado.

      Enrique Arce Alejandro

      Enrique Arce Alejandro

      student•
      hace 3 años

      Me sale el siguiente error, y tengo la interface heredada "public class CategoriaService : ICategoriaService", el error es este:

      Unhandled exception. System.AggregateException: Some services are not able to be constructed (Error while validating the service descriptor 'ServiceType: webapi.Services.ICategoriaService Lifetime: Scoped ImplementationType: webapi.Services.CategoriaService': Unable to resolve service for type 'webapi.TareasContext' while attempting to activate 'webapi.Services.CategoriaService'.) ---> System.InvalidOperationException: Error while validating the service descriptor 'ServiceType: webapi.Services.ICategoriaService Lifetime: Scoped ImplementationType: webapi.Services.CategoriaService': Unable to resolve service for type 'webapi.TareasContext' while attempting to activate 'webapi.Services.CategoriaService'.

        Miguel Teheran

        Miguel Teheran

        teacher•
        hace 3 años

        Segun error no tiene configurado correctamente el contexto de TareasContext oara que pueda ser inyecta a CategoriaService correctamente

      Alvaro Rafael Guete Puello

      Alvaro Rafael Guete Puello

      student•
      hace 7 meses

      ¿Qué puedo hacer si Visual Studio Code no detecta bien mis archivos C#?

        Jonathan Harley Sabogal toro

        Jonathan Harley Sabogal toro

        student•
        hace 7 meses

        verifica si están con la extension .cs ademas debes tener instalado en extension el devpack de c#

      Rosmary Alejandra Rojas Perez

      Rosmary Alejandra Rojas Perez

      student•
      hace 3 años

      Hola me genera un error y no logro resolverlo requiero su ayuda please!

      Unhandled exception. System.AggregateException: Some services are not able to be constructed (Error while validating the service descriptor 'ServiceType: webapi.Services.ICategoriaService Lifetime: Scoped ImplementationType: webapi.Services.CategoriaService': Unable to resolve service for type 'webapi.TareasContext' while attempting to activate 'webapi.Services.CategoriaService'.) (Error while validating the service descriptor 'ServiceType: webapi.Services.ITareasService Lifetime: Scoped ImplementationType: webapi.Services.TareasService': Unable to resolve service for type 'webapi.TareasContext' while attempting to activate 'webapi.Services.TareasService'.) ---> System.InvalidOperationException: Error while validating the service descriptor 'ServiceType: webapi.Services.ICategoriaService Lifetime: Scoped ImplementationType: webapi.Services.CategoriaService': Unable to resolve service for type 'webapi.TareasContext' while attempting to activate 'webapi.Services.CategoriaService'. ---> System.InvalidOperationException: Unable to resolve service for type 'webapi.TareasContext' while attempting to activate 'webapi.Services.CategoriaService'. at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites(Type implementationType, CallSiteChain callSiteChain, ParameterInfo[] parameters, Boolean throwIfCallSiteNotFound) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateConstructorCallSite(ResultCache lifetime, Type serviceType, Type implementationType, CallSiteChain callSiteChain) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(ServiceDescriptor descriptor, Type serviceType, CallSiteChain callSiteChain, Int32 slot) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.GetCallSite(ServiceDescriptor serviceDescriptor, CallSiteChain callSiteChain) at Microsoft.Extensions.DependencyInjection.ServiceProvider.ValidateService(ServiceDescriptor descriptor) --- End of inner exception stack trace --- at Microsoft.Extensions.DependencyInjection.ServiceProvider.ValidateService(ServiceDescriptor descriptor) at Microsoft.Extensions.DependencyInjection.ServiceProvider..ctor(ICollection1 serviceDescriptors, ServiceProviderOptions options) --- End of inner exception stack trace --- at Microsoft.Extensions.DependencyInjection.ServiceProvider..ctor(ICollection1 serviceDescriptors, ServiceProviderOptions options) at Microsoft.Extensions.DependencyInjection.ServiceCollectionContainerBuilderExtensions.BuildServiceProvider(IServiceCollection services, ServiceProviderOptions options)
      at Microsoft.Extensions.DependencyInjection.DefaultServiceProviderFactory.CreateServiceProvider(IServiceCollection containerBuilder) at Microsoft.Extensions.Hosting.Internal.ServiceFactoryAdapter1.CreateServiceProvider(Object containerBuilder) at Microsoft.Extensions.Hosting.HostBuilder.CreateServiceProvider() at Microsoft.Extensions.Hosting.HostBuilder.Build() at Microsoft.AspNetCore.Builder.WebApplicationBuilder.Build() at Program.<Main>$(String[] args) in C:\Users\57313\Documents\testTechnical\webapi\Program.cs:line 18 ---> (Inner Exception #1) System.InvalidOperationException: Error while validating the service descriptor 'ServiceType: webapi.Services.ITareasService Lifetime: Scoped ImplementationType: webapi.Services.TareasService': Unable to resolve service for type 'webapi.TareasContext' while attempting to activate 'webapi.Services.TareasService'. ---> System.InvalidOperationException: Unable to resolve service for type 'webapi.TareasContext' while attempting to activate 'webapi.Services.TareasService'. at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites(Type implementationType, CallSiteChain callSiteChain, ParameterInfo[] parameters, Boolean throwIfCallSiteNotFound) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateConstructorCallSite(ResultCache lifetime, Type serviceType, Type implementationType, CallSiteChain callSiteChain) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(ServiceDescriptor descriptor, Type serviceType, CallSiteChain callSiteChain, Int32 slot) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.GetCallSite(ServiceDescriptor serviceDescriptor, CallSiteChain callSiteChain) at Microsoft.Extensions.DependencyInjection.ServiceProvider.ValidateService(ServiceDescriptor descriptor) --- End of inner exception stack trace --- at Microsoft.Extensions.DependencyInjection.ServiceProvider.ValidateService(ServiceDescriptor descriptor) at Microsoft.Extensions.DependencyInjection.ServiceProvider..ctor(ICollection1 serviceDescriptors, ServiceProviderOptions options)

        Miguel Teheran

        Miguel Teheran

        teacher•
        hace 3 años

        Revisa si CategoriaService esta implementando ICategoriaService Este parece ser el problema

      Fernando Vergel

      Fernando Vergel

      student•
      hace 3 años

      Hola, me esta arrojando este error, despues de hacer el services.AddScoped<ITareaService, TareaService>();

      Unhandled exception. System.AggregateException: Some services are not able to be constructed (Error while validating the service descriptor 'ServiceType: WEBAPI.Services.ITareasService Lifetime: Scoped ImplementationType: WEBAPI.Services.TareasService': Unable to resolve service for type 'WEBAPI.TareasContext' while attempting to activate 'WEBAPI.Services.TareasService'.)

        Miguel Teheran

        Miguel Teheran

        teacher•
        hace 3 años

        Debes revisas si TareasService esta implementando la interfaz esto se hace utilizando el operador dos puntos así: TareasService : ITareaService

        Fernando Vergel

        Fernando Vergel

        student•
        hace 3 años

        Hola Miguel, gracias por la respuesta, asi esta implementado:

        using API.Models; using System; using System.Collections.Generic; using System.Threading.Tasks;

        namespace API.Services

        { public class TareaService : ITareaService { TareasContext Context; public TareaService(TareasContext dbContext) { Context = dbContext; } public IEnumerable<Tarea> Get() { return Context.Tareas; } public async Task Save(Tarea tarea) { Context.Add(tarea); await Context.SaveChangesAsync(); } public async Task Update(Guid id, Tarea tarea) { var tareaActual = Context.Tareas.Find(id); if (tareaActual != null) { tareaActual.CategoriaId = tarea.CategoriaId; tareaActual.Titulo = tarea.Titulo; tareaActual.PrioridadTarea = tarea.PrioridadTarea; tareaActual.Descripcion = tarea.Descripcion; await Context.SaveChangesAsync(); } } public async Task Delete(Guid id) { var tareaActual = Context.Tareas.Find(id); if (tareaActual != null) { Context.Remove(tareaActual); await Context.SaveChangesAsync(); } } } public interface ITareaService { IEnumerable<Tarea> Get(); Task Save(Tarea tarea); Task Update(Guid id, Tarea tarea); Task Delete(Guid id); }

        }

      Luis Antonio Preza Padilla

      Luis Antonio Preza Padilla

      student•
      hace 2 años

      Que hace el atributo APIController?

      Miguel Angel Reyes Moreno

      Miguel Angel Reyes Moreno

      student•
      hace 3 años

      VSC me marcaba error porque no tenía los métodos en la Interfaz de TareasService, solo asegurense de que estén definidos:

      public interface ITareasService { IEnumerable<Tarea> Get(); Task Save(Tarea tarea); Task Update(Guid id, Tarea tarea); Task Delete(Guid id); }

      Y ya con eso queda el archivo de TareaController:

      using Microsoft.AspNetCore.Mvc; using webapi.Models; using webapi.Services; namespace webapi.Controllers; [Route("/api/[controller]")] public class TareaController : ControllerBase { protected readonly ITareasService _tareasService; public TareaController(ITareasService service) { _tareasService = service; } [HttpGet] public IActionResult Get() { return Ok(_tareasService.Get()); } [HttpPost] public IActionResult Post([FromBody] Tarea tarea) { _tareasService.Save(tarea); return Ok("Tarea creada"); } [HttpPut("{id}")] public IActionResult Put(Guid id, [FromBody] Tarea tarea) { _tareasService.Update(id, tarea); return Ok("Tarea actualizada"); } [HttpDelete("{id}")] public IActionResult Delete(Guid id) { _tareasService.Delete(id); return Ok("Tarea eliminada"); } }

    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