SlideShare une entreprise Scribd logo
1  sur  34
Luis Beltrán
Minimal
APIs
https://github.com/microsoft/workshop-library/
● Microsoft MVP en IA, Developer Technologies y Azure
● Docente en TecNM Celaya
● Estudiante de doctorado en Tomás Bata University in Zlín
Luis Beltrán
@darkicebeam
luis@luisbeltran.mx
luisbeltran.mx
Agenda
Requisitos
Qué instalar, prerequisitos y
objetivos de aprendizaje 01
03
02
04
05
¿Qué es Minimal
APIs?
Low ceremony APIs in .NET
Todo API:
Configuración
Construye el backend de una
aplicación Todo usando minimal
APIs
Todo API: CRUD
Construye una aplicación CRUD
Todo API: Bases de
datos
Almacena información en una
base de datos
Requisitos
01
Requisitos
Esto es lo que necesitas para
este taller:
• SDK de .NET 6 (dot.net/download)
• Un editor de tu elección, por
ejemplo Visual Studio Code o
Visual Studio 2019/2022
Puedes descargar Visual Studio Code y el SDK de .NET 6 en
conjunto:
Para macOS: https://aka.ms/dotnet-coding-pack-mac
Para Windows: https://aka.ms/dotnet-coding-pack-win
Objetivos de Aprendizaje
Minimal APIs
Obtén información sobre qué es
una minimal API y cuándo debes
usarla.
Aplicaciones CRUD
Aprende qué es una aplicación CRUD básica.
Crea tu propia minimal API para una lista de
elementos.
Aprenderás a crear, leer, actualizar y eliminar
dinámicamente elementos de la lista.
Bases de datos
Aprende a registrar información en
una base de datos persistente con
SQL Server.
¿Qué es Minimal APIs?
02
¿Qué es una API? 💡API significa Application Programming
Interface
Se trata de colecciones de operaciones que puedes invocar en un
equipo (típicamente llamado servidor) de forma local o remota.
🖥️ Web APIs son operaciones que
puedes invocar a través de HTTP
Esto te permite aprovechar la funcionalidad que proporcionan esas
operaciones.
❗Crear una API puede ser complejo
Necesitan admitir muchas características como enrutamiento, lectura
y escritura en el almacenamiento de datos y autenticación.
¡Aquí es donde las minimal API son áútiles!
Minimal APIs
Minimal First
Cree una API en C# con solo 3
líneas de código.
Crece contigo
El ecosistema de C# impulsa las
aplicaciones más productivas de la
web y respaldará su proyecto, sin
importar el tamaño.
Increíblemente rápido
Ha demostrado ser uno de los
servidores web más rápidos del
mundo, atendiendo más de 4
millones de solicitudes por segundo.
Minimal APIs son una forma de baja ceremonia para crear APIs HTTP en ASP.NET Core.
Minimal APIs se enganchan en las capacidades de hospedaje y enrutamiento de
ASP.NET Core y te permiten crear APIs completamente funcionales con solo unas pocas
líneas de código.
🍃 🌱 ⚡
Todo API: Configuración
03
Crea y ejecuta tu Todo API
Crea la API con la CLI de .NET
dotnet new web -o TodoApi
Ahora, que has creado tu minimal API, puedes ejecutarla.
Navega a la carpeta TodoApi y ejecuta el siguiente comando
Ejecuta tu minimal API
TodoApi> dotnet watch
Mira tu API en acción
Navega a http://localhost:[port] en un navegador y ve el texto Hello World!
01
02
03
Agrega una nueva ruta
Abre tu app TodoApi en un editor de tu elección y
abra el archivo Program.cs.
Tu archivo Program.cs se parece al código
mostrado.
En Program.cs, agrega una nueva ruta /todo a nuestra
API que devuelva una lista de elementos. Añade una
sentencia MapGet después de app.MapGet("/", ()
=> "Hello World!");
Navega a https://localhost:[port]/todo para ver este elemento recién creado
Configura OpenAPI y
Swagger UI
Instala el paquete Swashbuckle.AspNetCore para agregar el soporte a Swagger.
Configura OpenAPI y
Swagger UI
Snippet 1: Debajo de var builder = WebApplication.CreateBuilder(args); , agrega las siguientes líneas de
código.
Snippet 2: Arriba de app.MapGet("/", () => "Hello World!");, agrega las siguientes líneas de código:
El método AddSwaggerGen agrega información como el título, la descripción y la versión a la API.
Vuelve al navegador y accede a esta URL: https://localhost:[port]/swagger
Todo API: CRUD
04
Previamente, has creado una API simple en la que codificaste los
resultados en el método HTTP.
Ahora, vamos a dar un paso adelante y crear algo dinámico. En
lugar de devolver un elemento estático que está codificado, vamos
a crear una lista de tareas pendientes que podemos actualizar, crear
nuevos elementos, marcar un elemento como completo y eliminar
un elemento.
Create Read Update Delete
Nuestra Todo API va a...
Crear un nuevo elemento
Devolver un
elemento
específico
Actualizar un
elemento
existente
Eliminar un elemento
Crea un modelo de
datos
Crea una clase que modele los datos que queremos recopilar, también conocido como
modelo de datos. El código para tu TodoItem va después de app.Run();
Así es como se definen los datos que queremos recopilar.
Almacena un elemento
Instala el paquete Entity Framework Core InMemory
Entity Framework es una biblioteca de código que permite la transferencia de datos almacenados en
tablas de bases de datos relacionales a objetos que se utilizan con mayor frecuencia en el código de
aplicación.
EntityFramework nos permite conectar nuestro código a los datos que queremos
guardar y consultarlos.
Para hacer esto, ¡vamos a crear una clase TodoDb!
Agrega using Microsoft.EntityFrameworkCore; en la parte superior de tu archivo Program.cs:
Debajo de TodoItem crea una clase TodoDb
Snippet 1:
Snippet 2:
Antes de los servicios AddEndpointsApiExplorer que configuramos previamente,
añade el siguiente código
Para obtener una lista de elementos, reemplaza la ruta "/todo" con la ruta "/todos" y su código:
Crear nuevos elementos
Vamos a hacer POST de nuevas tareas en la lista.
Debajo del app.MapGet anterior añade:
¡Vamos a probarlo!
Regresa a Swagger y ahora deberías
ver POST /todos. Para agregar
nuevos elementos a la lista:
1. Haz click en POST /todos
2. Haz click en Try it out
3. Actualiza id, item, e isComplete
4. Haz click en Execute
Obtener los elementos
1. Haz click en GET /todos
2. Haz click en Try it out
3. Haz click en Execute
La respuesta (Response body) incluirá los elementos recién añadidos
Para obtener (GET) un elemento por su id, añade el código debajo de la ruta app.MapPost
Para comprobar esto, puede ir a https://localhost:5001/todos/1 o usar
la Swagger UI.
Actualizar un elemento
Para actualizar un elemento existente,
agrega el siguiente código debajo de la ruta
GET /todos/{id} creada anteriormente.
1. Haz click en PUT/todos/{id}
2. Haz click en Try it out
3. En la caja id ingresa 2
4. Actualiza el Request
body con el código JSON
colocando isComplete en true.
5. Haz click en Execute
Para verificar, desplázate a GET/todos/{id} y revisa que Water Plants está completada.
Eliminar un elemento
Para eliminar un elemento existente, agrega el
código siguiente debajo de PUT/todos/{id}
Ahora, intenta eliminar un
elemento.
Todo API: Bases de datos
05
Trabajemos con una base de datos persistente para que los datos se
guarden incluso después de cerrar la aplicación.
Working with Databases
Acabamos de aprender a construir una aplicación CRUD básica con una base de datos
en memoria.
Vamos a dar un paso adelante y trabajar con una base de datos persistente. Esto
significa que sus datos se guardarán incluso después de cerrar su aplicación.
Para este tutorial usaremos SQL Server.
Configura la base de datos SQL Server
SQLServer EF Core Database Provider: puede tener acceso a muchas bases de datos diferentes a través de bibliotecas de
complementos denominadas proveedores de bases de datos.
Instala las siguientes herramientas y paquetes
Entity Framework Core tools: herramientas para que Entity Framework Core realice tareas de desarrollo en tiempo de diseño.
Microsoft.EntityFrameworkCore.Design: contiene toda la lógica en tiempo de diseño para que EF core cree la
base de datos.
Habilita la creación de bases de datos
Establece la cadena de conexión de la base de datos
Migra el modelo de datos a una base de datos SQL Server.
Crea un modelo de datos
Crea la base de datos y el esquema
01
02
03
Establece la cadena de conexión
En Program.cs debajo de var builder =
WebApplication.CreateBuilder(args); agrega una cadena de conexión.
Agrega contexto a tus
servicios
Ahora vamos a reemplazar la base de datos en memoria con una base de datos persistente.
Reemplaza la implementación de la base de datos en
memoria builder.Services.AddDbContext<TodoDb>(options =>
options.UseInMemoryDatabase("items")); en tus servicios build con la de SQL Server:
Migra el modelo de datos
Con la herramienta de migración de EF Core, ahora puedes iniciar tu primer
migración InitialCreate. En una ventana de terminal, ejecuta el
comando migrations add :
EF Core creará una carpeta denominada Migrations en el directorio del
proyecto que contiene dos archivos:
Crea la base de datos
y el esquema
Ahora que has completado la migración, puedes usarla para crear la base de datos y
el esquema. En una ventana de terminal, ejecuta el comando database
update para aplicar migraciones a una base de datos:
Deberías ver un archivo todos.db recién creado en el directorio del proyecto:
Prueba la aplicación de nuevo en Swagger – verás que tus elementos Todo están
almacenados en la base de datos, por lo que permanecen aún si detienes e
inicias la aplicación de nuevo.
CREDITS: This presentation template was created by Slidesgo, including
icons by Flaticon, and infographics & images by Freepik.
Please keep this slide for attribution.
Happy Coding!
¡GRACIAS!
Click to add text

Contenu connexe

Similaire à Evolution INTech - Acceso a bases de datos con Minimal APIs de .NET 6.pptx

Dce2 Introduccion Asp.Net
Dce2 Introduccion Asp.NetDce2 Introduccion Asp.Net
Dce2 Introduccion Asp.Net
Esteban Soraire
 
Reportes En J Developer Parte 1 Y 2
Reportes En J Developer   Parte 1 Y 2Reportes En J Developer   Parte 1 Y 2
Reportes En J Developer Parte 1 Y 2
Steven Gomez
 
Microsoft Asp. Net [Asp.Net - Parte 2]
Microsoft Asp. Net [Asp.Net - Parte 2]Microsoft Asp. Net [Asp.Net - Parte 2]
Microsoft Asp. Net [Asp.Net - Parte 2]
Antonio Torres
 
Tutorial aprendiendo a programar
Tutorial aprendiendo a programarTutorial aprendiendo a programar
Tutorial aprendiendo a programar
blasty2
 

Similaire à Evolution INTech - Acceso a bases de datos con Minimal APIs de .NET 6.pptx (20)

spring-boot-es
spring-boot-esspring-boot-es
spring-boot-es
 
Mvc
MvcMvc
Mvc
 
Dce2 Introduccion Asp.Net
Dce2 Introduccion Asp.NetDce2 Introduccion Asp.Net
Dce2 Introduccion Asp.Net
 
Dayismel cervantes 3_er corte 1er 20%
Dayismel cervantes 3_er corte 1er 20%Dayismel cervantes 3_er corte 1er 20%
Dayismel cervantes 3_er corte 1er 20%
 
Tutorial net beans
Tutorial net beansTutorial net beans
Tutorial net beans
 
Framework Catalyst
Framework CatalystFramework Catalyst
Framework Catalyst
 
Reportes En J Developer Parte 1 Y 2
Reportes En J Developer   Parte 1 Y 2Reportes En J Developer   Parte 1 Y 2
Reportes En J Developer Parte 1 Y 2
 
Microsoft Asp. Net [Asp.Net - Parte 2]
Microsoft Asp. Net [Asp.Net - Parte 2]Microsoft Asp. Net [Asp.Net - Parte 2]
Microsoft Asp. Net [Asp.Net - Parte 2]
 
Prepara tus apps de SharePoint y Office 365 para el futuro
Prepara tus apps de SharePoint y Office 365 para el futuroPrepara tus apps de SharePoint y Office 365 para el futuro
Prepara tus apps de SharePoint y Office 365 para el futuro
 
CONEXION A BASE DE DATOS - VISUAL BASIC 6.0
CONEXION A BASE DE DATOS - VISUAL BASIC 6.0 CONEXION A BASE DE DATOS - VISUAL BASIC 6.0
CONEXION A BASE DE DATOS - VISUAL BASIC 6.0
 
Gestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniterGestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniter
 
CONEXION A LA BASE DE DATOS SQLITE A TRAVES DE UNA APLICACION MOVIL ANDRO...
CONEXION A  LA BASE DE DATOS  SQLITE A TRAVES DE UNA APLICACION  MOVIL  ANDRO...CONEXION A  LA BASE DE DATOS  SQLITE A TRAVES DE UNA APLICACION  MOVIL  ANDRO...
CONEXION A LA BASE DE DATOS SQLITE A TRAVES DE UNA APLICACION MOVIL ANDRO...
 
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
 
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptx
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptxEFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptx
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptx
 
Infraestructura como Código con Azure Resource Manager
Infraestructura como Código con Azure Resource ManagerInfraestructura como Código con Azure Resource Manager
Infraestructura como Código con Azure Resource Manager
 
Tutorial aprendiendo a programar
Tutorial aprendiendo a programarTutorial aprendiendo a programar
Tutorial aprendiendo a programar
 
Tutorial aprendiendo a programar
Tutorial aprendiendo a programarTutorial aprendiendo a programar
Tutorial aprendiendo a programar
 
Tutorial aprendiendo a programar
Tutorial aprendiendo a programarTutorial aprendiendo a programar
Tutorial aprendiendo a programar
 
Tutorial aprendiendo a programar
Tutorial aprendiendo a programarTutorial aprendiendo a programar
Tutorial aprendiendo a programar
 
Efc programación .net-luis fernando aguas - 22012022 1700
Efc programación .net-luis fernando aguas - 22012022 1700Efc programación .net-luis fernando aguas - 22012022 1700
Efc programación .net-luis fernando aguas - 22012022 1700
 

Plus de Luis775803

Plus de Luis775803 (20)

TalentLand - Entendiendo tus documentos con Azure Form Recognizer.pptx
TalentLand - Entendiendo tus documentos con Azure Form Recognizer.pptxTalentLand - Entendiendo tus documentos con Azure Form Recognizer.pptx
TalentLand - Entendiendo tus documentos con Azure Form Recognizer.pptx
 
IA Conversacional con Power Virtual Agents.pptx
IA Conversacional con Power Virtual Agents.pptxIA Conversacional con Power Virtual Agents.pptx
IA Conversacional con Power Virtual Agents.pptx
 
Colombia Cloud Bootcamp - IA y Accesibilidad Pronunciation Assessment.pptx
Colombia Cloud Bootcamp - IA y Accesibilidad Pronunciation Assessment.pptxColombia Cloud Bootcamp - IA y Accesibilidad Pronunciation Assessment.pptx
Colombia Cloud Bootcamp - IA y Accesibilidad Pronunciation Assessment.pptx
 
STEMWeek - Entendiendo tus documentos con Azure Form Recognizer.pptx
STEMWeek - Entendiendo tus documentos con Azure Form Recognizer.pptxSTEMWeek - Entendiendo tus documentos con Azure Form Recognizer.pptx
STEMWeek - Entendiendo tus documentos con Azure Form Recognizer.pptx
 
Student Summit - Conoce más sobre mi carrera en IA y Datos.pptx
Student Summit - Conoce más sobre mi carrera en IA y Datos.pptxStudent Summit - Conoce más sobre mi carrera en IA y Datos.pptx
Student Summit - Conoce más sobre mi carrera en IA y Datos.pptx
 
Gira Speaker Latam - IA y Accesibilidad con Pronunciation Assessment.pptx
Gira Speaker Latam - IA y Accesibilidad con Pronunciation Assessment.pptxGira Speaker Latam - IA y Accesibilidad con Pronunciation Assessment.pptx
Gira Speaker Latam - IA y Accesibilidad con Pronunciation Assessment.pptx
 
Build After Party Bolivia - Hugging Face on Azure.pptx
Build After Party Bolivia - Hugging Face on Azure.pptxBuild After Party Bolivia - Hugging Face on Azure.pptx
Build After Party Bolivia - Hugging Face on Azure.pptx
 
Microsoft Reactor - Creando un modelo de Regresión con Azure Machine Learnin...
Microsoft Reactor - Creando un modelo de Regresión con Azure Machine Learnin...Microsoft Reactor - Creando un modelo de Regresión con Azure Machine Learnin...
Microsoft Reactor - Creando un modelo de Regresión con Azure Machine Learnin...
 
Introduction to .NET MAUI.pdf
Introduction to .NET MAUI.pdfIntroduction to .NET MAUI.pdf
Introduction to .NET MAUI.pdf
 
SISWeek Creando un sistema de reconocimiento facial con Face API.pptx
SISWeek Creando un sistema de reconocimiento facial con Face API.pptxSISWeek Creando un sistema de reconocimiento facial con Face API.pptx
SISWeek Creando un sistema de reconocimiento facial con Face API.pptx
 
Azure Guatemala.pptx
Azure Guatemala.pptxAzure Guatemala.pptx
Azure Guatemala.pptx
 
Conoce las novedades de .NET MAUI en .NET 7.pptx
Conoce las novedades de .NET MAUI en .NET 7.pptxConoce las novedades de .NET MAUI en .NET 7.pptx
Conoce las novedades de .NET MAUI en .NET 7.pptx
 
GAIB Philippines - Tailoring OpenAI’s GPT-3 to suit your specific needs.pptx
GAIB Philippines - Tailoring OpenAI’s GPT-3 to suit your specific needs.pptxGAIB Philippines - Tailoring OpenAI’s GPT-3 to suit your specific needs.pptx
GAIB Philippines - Tailoring OpenAI’s GPT-3 to suit your specific needs.pptx
 
Power BI Summit 2023 - Embedding PowerBI reports in .NET MAUI mobile apps.pptx
Power BI Summit 2023 - Embedding PowerBI reports in .NET MAUI mobile apps.pptxPower BI Summit 2023 - Embedding PowerBI reports in .NET MAUI mobile apps.pptx
Power BI Summit 2023 - Embedding PowerBI reports in .NET MAUI mobile apps.pptx
 
Towards Responsible AI - Global AI Student Conference 2022.pptx
Towards Responsible AI - Global AI Student Conference 2022.pptxTowards Responsible AI - Global AI Student Conference 2022.pptx
Towards Responsible AI - Global AI Student Conference 2022.pptx
 
Mes de Datos Ciencia de Datos a otro nivel con Azure Machine Learning.pptx
Mes de Datos Ciencia de Datos a otro nivel con Azure Machine Learning.pptxMes de Datos Ciencia de Datos a otro nivel con Azure Machine Learning.pptx
Mes de Datos Ciencia de Datos a otro nivel con Azure Machine Learning.pptx
 
GAIB Germany - Tailoring OpenAI’s GPT-3 to suit your specific needs.pptx
GAIB Germany - Tailoring OpenAI’s GPT-3 to suit your specific needs.pptxGAIB Germany - Tailoring OpenAI’s GPT-3 to suit your specific needs.pptx
GAIB Germany - Tailoring OpenAI’s GPT-3 to suit your specific needs.pptx
 
Platzi Azure.pptx
Platzi Azure.pptxPlatzi Azure.pptx
Platzi Azure.pptx
 
GAIB Latam - Tailoring OpenAI’s GPT-3 to suit your specific needs.pptx
GAIB Latam - Tailoring OpenAI’s GPT-3 to suit your specific needs.pptxGAIB Latam - Tailoring OpenAI’s GPT-3 to suit your specific needs.pptx
GAIB Latam - Tailoring OpenAI’s GPT-3 to suit your specific needs.pptx
 
Virtual Azure Community Day - Workloads de búsqueda full-text Azure Search.pptx
Virtual Azure Community Day - Workloads de búsqueda full-text Azure Search.pptxVirtual Azure Community Day - Workloads de búsqueda full-text Azure Search.pptx
Virtual Azure Community Day - Workloads de búsqueda full-text Azure Search.pptx
 

Dernier

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Dernier (12)

Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 

Evolution INTech - Acceso a bases de datos con Minimal APIs de .NET 6.pptx

  • 2. ● Microsoft MVP en IA, Developer Technologies y Azure ● Docente en TecNM Celaya ● Estudiante de doctorado en Tomás Bata University in Zlín Luis Beltrán @darkicebeam luis@luisbeltran.mx luisbeltran.mx
  • 3. Agenda Requisitos Qué instalar, prerequisitos y objetivos de aprendizaje 01 03 02 04 05 ¿Qué es Minimal APIs? Low ceremony APIs in .NET Todo API: Configuración Construye el backend de una aplicación Todo usando minimal APIs Todo API: CRUD Construye una aplicación CRUD Todo API: Bases de datos Almacena información en una base de datos
  • 5. Requisitos Esto es lo que necesitas para este taller: • SDK de .NET 6 (dot.net/download) • Un editor de tu elección, por ejemplo Visual Studio Code o Visual Studio 2019/2022 Puedes descargar Visual Studio Code y el SDK de .NET 6 en conjunto: Para macOS: https://aka.ms/dotnet-coding-pack-mac Para Windows: https://aka.ms/dotnet-coding-pack-win
  • 6. Objetivos de Aprendizaje Minimal APIs Obtén información sobre qué es una minimal API y cuándo debes usarla. Aplicaciones CRUD Aprende qué es una aplicación CRUD básica. Crea tu propia minimal API para una lista de elementos. Aprenderás a crear, leer, actualizar y eliminar dinámicamente elementos de la lista. Bases de datos Aprende a registrar información en una base de datos persistente con SQL Server.
  • 7. ¿Qué es Minimal APIs? 02
  • 8. ¿Qué es una API? 💡API significa Application Programming Interface Se trata de colecciones de operaciones que puedes invocar en un equipo (típicamente llamado servidor) de forma local o remota. 🖥️ Web APIs son operaciones que puedes invocar a través de HTTP Esto te permite aprovechar la funcionalidad que proporcionan esas operaciones. ❗Crear una API puede ser complejo Necesitan admitir muchas características como enrutamiento, lectura y escritura en el almacenamiento de datos y autenticación. ¡Aquí es donde las minimal API son áútiles!
  • 9.
  • 10. Minimal APIs Minimal First Cree una API en C# con solo 3 líneas de código. Crece contigo El ecosistema de C# impulsa las aplicaciones más productivas de la web y respaldará su proyecto, sin importar el tamaño. Increíblemente rápido Ha demostrado ser uno de los servidores web más rápidos del mundo, atendiendo más de 4 millones de solicitudes por segundo. Minimal APIs son una forma de baja ceremonia para crear APIs HTTP en ASP.NET Core. Minimal APIs se enganchan en las capacidades de hospedaje y enrutamiento de ASP.NET Core y te permiten crear APIs completamente funcionales con solo unas pocas líneas de código. 🍃 🌱 ⚡
  • 11.
  • 13. Crea y ejecuta tu Todo API Crea la API con la CLI de .NET dotnet new web -o TodoApi Ahora, que has creado tu minimal API, puedes ejecutarla. Navega a la carpeta TodoApi y ejecuta el siguiente comando Ejecuta tu minimal API TodoApi> dotnet watch Mira tu API en acción Navega a http://localhost:[port] en un navegador y ve el texto Hello World! 01 02 03
  • 14. Agrega una nueva ruta Abre tu app TodoApi en un editor de tu elección y abra el archivo Program.cs. Tu archivo Program.cs se parece al código mostrado. En Program.cs, agrega una nueva ruta /todo a nuestra API que devuelva una lista de elementos. Añade una sentencia MapGet después de app.MapGet("/", () => "Hello World!"); Navega a https://localhost:[port]/todo para ver este elemento recién creado
  • 15. Configura OpenAPI y Swagger UI Instala el paquete Swashbuckle.AspNetCore para agregar el soporte a Swagger.
  • 16. Configura OpenAPI y Swagger UI Snippet 1: Debajo de var builder = WebApplication.CreateBuilder(args); , agrega las siguientes líneas de código. Snippet 2: Arriba de app.MapGet("/", () => "Hello World!");, agrega las siguientes líneas de código: El método AddSwaggerGen agrega información como el título, la descripción y la versión a la API. Vuelve al navegador y accede a esta URL: https://localhost:[port]/swagger
  • 17. Todo API: CRUD 04 Previamente, has creado una API simple en la que codificaste los resultados en el método HTTP. Ahora, vamos a dar un paso adelante y crear algo dinámico. En lugar de devolver un elemento estático que está codificado, vamos a crear una lista de tareas pendientes que podemos actualizar, crear nuevos elementos, marcar un elemento como completo y eliminar un elemento.
  • 18. Create Read Update Delete Nuestra Todo API va a... Crear un nuevo elemento Devolver un elemento específico Actualizar un elemento existente Eliminar un elemento
  • 19. Crea un modelo de datos Crea una clase que modele los datos que queremos recopilar, también conocido como modelo de datos. El código para tu TodoItem va después de app.Run(); Así es como se definen los datos que queremos recopilar.
  • 20. Almacena un elemento Instala el paquete Entity Framework Core InMemory Entity Framework es una biblioteca de código que permite la transferencia de datos almacenados en tablas de bases de datos relacionales a objetos que se utilizan con mayor frecuencia en el código de aplicación. EntityFramework nos permite conectar nuestro código a los datos que queremos guardar y consultarlos. Para hacer esto, ¡vamos a crear una clase TodoDb! Agrega using Microsoft.EntityFrameworkCore; en la parte superior de tu archivo Program.cs:
  • 21. Debajo de TodoItem crea una clase TodoDb Snippet 1: Snippet 2: Antes de los servicios AddEndpointsApiExplorer que configuramos previamente, añade el siguiente código Para obtener una lista de elementos, reemplaza la ruta "/todo" con la ruta "/todos" y su código:
  • 22. Crear nuevos elementos Vamos a hacer POST de nuevas tareas en la lista. Debajo del app.MapGet anterior añade: ¡Vamos a probarlo! Regresa a Swagger y ahora deberías ver POST /todos. Para agregar nuevos elementos a la lista: 1. Haz click en POST /todos 2. Haz click en Try it out 3. Actualiza id, item, e isComplete 4. Haz click en Execute
  • 23. Obtener los elementos 1. Haz click en GET /todos 2. Haz click en Try it out 3. Haz click en Execute La respuesta (Response body) incluirá los elementos recién añadidos Para obtener (GET) un elemento por su id, añade el código debajo de la ruta app.MapPost Para comprobar esto, puede ir a https://localhost:5001/todos/1 o usar la Swagger UI.
  • 24. Actualizar un elemento Para actualizar un elemento existente, agrega el siguiente código debajo de la ruta GET /todos/{id} creada anteriormente. 1. Haz click en PUT/todos/{id} 2. Haz click en Try it out 3. En la caja id ingresa 2 4. Actualiza el Request body con el código JSON colocando isComplete en true. 5. Haz click en Execute Para verificar, desplázate a GET/todos/{id} y revisa que Water Plants está completada.
  • 25. Eliminar un elemento Para eliminar un elemento existente, agrega el código siguiente debajo de PUT/todos/{id} Ahora, intenta eliminar un elemento.
  • 26. Todo API: Bases de datos 05 Trabajemos con una base de datos persistente para que los datos se guarden incluso después de cerrar la aplicación.
  • 27. Working with Databases Acabamos de aprender a construir una aplicación CRUD básica con una base de datos en memoria. Vamos a dar un paso adelante y trabajar con una base de datos persistente. Esto significa que sus datos se guardarán incluso después de cerrar su aplicación. Para este tutorial usaremos SQL Server.
  • 28. Configura la base de datos SQL Server SQLServer EF Core Database Provider: puede tener acceso a muchas bases de datos diferentes a través de bibliotecas de complementos denominadas proveedores de bases de datos. Instala las siguientes herramientas y paquetes Entity Framework Core tools: herramientas para que Entity Framework Core realice tareas de desarrollo en tiempo de diseño. Microsoft.EntityFrameworkCore.Design: contiene toda la lógica en tiempo de diseño para que EF core cree la base de datos.
  • 29. Habilita la creación de bases de datos Establece la cadena de conexión de la base de datos Migra el modelo de datos a una base de datos SQL Server. Crea un modelo de datos Crea la base de datos y el esquema 01 02 03
  • 30. Establece la cadena de conexión En Program.cs debajo de var builder = WebApplication.CreateBuilder(args); agrega una cadena de conexión.
  • 31. Agrega contexto a tus servicios Ahora vamos a reemplazar la base de datos en memoria con una base de datos persistente. Reemplaza la implementación de la base de datos en memoria builder.Services.AddDbContext<TodoDb>(options => options.UseInMemoryDatabase("items")); en tus servicios build con la de SQL Server:
  • 32. Migra el modelo de datos Con la herramienta de migración de EF Core, ahora puedes iniciar tu primer migración InitialCreate. En una ventana de terminal, ejecuta el comando migrations add : EF Core creará una carpeta denominada Migrations en el directorio del proyecto que contiene dos archivos:
  • 33. Crea la base de datos y el esquema Ahora que has completado la migración, puedes usarla para crear la base de datos y el esquema. En una ventana de terminal, ejecuta el comando database update para aplicar migraciones a una base de datos: Deberías ver un archivo todos.db recién creado en el directorio del proyecto: Prueba la aplicación de nuevo en Swagger – verás que tus elementos Todo están almacenados en la base de datos, por lo que permanecen aún si detienes e inicias la aplicación de nuevo.
  • 34. CREDITS: This presentation template was created by Slidesgo, including icons by Flaticon, and infographics & images by Freepik. Please keep this slide for attribution. Happy Coding! ¡GRACIAS! Click to add text

Notes de l'éditeur

  1. Introduce yourself! More instructions and an overview of this workshop can be found in this GitHub repository: microsoft/workshop-library: A library of workshops written by and for Microsoft Learn Student Ambassadors and Cloud Advocates and their local communities (github.com) https://github.com/microsoft/workshop-library/tree/main/full/intro-minapi
  2. Recommendation: Send out this list of prerequisite tools prior to giving your session. This way, everyone in the session will already have what they need. .NET 6 SDK download: http://dot.net/download  VS Code, .NET 6 bundle installer for macOS: https://aka.ms/dotnet-coding-pack-mac  VS Code, .NET 6 bundle installer for Windows: https://aka.ms/dotnet-coding-pack-win 
  3. For a web developer, building a web API is a common task. You want to be able to serve some data and know how an application, or service, consumes it. But, how you build the API might differ vastly between tech stacks. As part of building an API, you know there are parts like data storage, security, versioning, and documentation. Getting all these parts to work can be a complex undertaking. Presenter Tip: These topics can be a bit complicated! We recommend brushing up on APIs and learning a bit more about minimal APIs by taking this self-guided tutorial on Microsoft Learn: https://docs.microsoft.com/learn/modules/build-web-api-minimal-api/ 
  4. With Minimal APIs, the task of creating an API is much simpler! You can get started with just a few lines of code. Presenter Tip: Here, it may be helpful to pause and answer questions. In the next few slides, you'll get into the exercise!
  5. If you are in Visual Studio Code, you can do this using the built-in Terminal. You can also use your command prompt. There is an optional –minimal flag flag for the dotnet new web template. We're not going to use that here for the following reasons: If you use -minimal it sets up swashbuckle and a sample weather forecast API, but it's actually 5x more code than if you don't use the -minimal flag. Using dotnet new web without -minimal includes a default route you can browse to, which is nicer experience for beginners.
  6. Presenter tip: Here, it will be helpful to show how you are completing the task. We recommend opening up Visual Studio Code and completing these steps as you go along. Snippet 1: var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); app.MapGet("/", () => "Hello World!"); app.Run(); Snippet 2: app.MapGet("/todo", () => new { Item = "Water plants", Complete = "false" });
  7. Snippet: dotnet add package Swashbuckle.AspNetCore --version 6.1.4
  8. Snippet 1: builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(c => {     c.SwaggerDoc("v1", new OpenApiInfo { Title = "Todo API", Description = "Keep track of your tasks", Version = "v1" }); }); Snippet 2: app.UseSwagger(); app.UseSwaggerUI(c => {    c.SwaggerEndpoint("/swagger/v1/swagger.json", "Todo API V1"); }); Note: You can optionally replace the Hello World default response to redirect to the Swagger page. Replace app.MapGet("/", () => "Hello World!"); with: app.MapGet("/", () => Results.Redirect("/swagger"));
  9. Snippet: class TodoItem {     public int Id { get; set; }     public string? Item { get; set; }     public bool IsComplete { get; set; } }
  10. Snippet: dotnet add package Microsoft.EntityFrameworkCore.InMemory
  11. Snippet 1: class TodoDb : DbContext {     public TodoDb(DbContextOptions options) : base(options) { }     public DbSet<TodoItem> Todos { get; set; }     protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)     {         optionsBuilder.UseInMemoryDatabase("Todos");     } } Snippet 2: builder.Services.AddDbContext<TodoDb>(options => options.UseInMemoryDatabase("items")); app.MapGet("/todos", async (TodoDb db) => await db.Todos.ToListAsync()); 1
  12. Snippet:  app.MapPost("/todos", async (TodoDb db, TodoItem todo) => {     await db.Todos.AddAsync(todo);     await db.SaveChangesAsync();     return Results.Created($"/todo/{todo.Id}", todo); }) .Accepts<TodoItem>(“application/json”) .Produces<TodoItem>(StatusCodes.Status201Created) .WithName(“CreateTodo”) .WithTags(“Todos”);
  13. Snippet: app.MapGet("/todos/{id}", async (TodoDb db, int id) => await db.Todos.FindAsync(id));
  14. Snippet: app.MapPut("/todos/{id}", async ( TodoDb db, TodoItem updateTodo ,int id) => {     var todo = await db.Todos.FindAsync(id);         if (todo is null) return Results.NotFound();         todo.Item = updateTodo.Item;     todo.IsComplete = updateTodo.IsComplete;     await db.SaveChangesAsync();     return Results.NoContent(); });
  15. Presenter Tip: Pause and ask for any questions. In the next few slides, we'll move on to our next topic: connecting to a database. Snippet: app.MapDelete("/todos/{id}", async (TodoDb db, int id) => {     var todo = await db.Todos.FindAsync(id);     if (todo is null)     {         return Results.NotFound();     }     db.Todos.Remove(todo);     await db.SaveChangesAsync();     return Results.Ok(todo); });
  16. Snippet 1: dotnet add package Microsoft.EntityFrameworkCore.Sqlite Snippet 2: dotnet tool install --global dotnet-ef Snippet 3: dotnet add package Microsoft.EntityFrameworkCore.Design
  17. Snippet: class TodoItem {     public int Id { get; set; }     public string? Item { get; set; }     public bool IsComplete { get; set; } }
  18. Snippet: var connectionString = builder.Configuration.GetConnectionString("todos") ?? "Data Source=todos.db";
  19. Snippet: builder.Services.AddSqlite<TodoDb>(connectionString);
  20. Snippet: dotnet ef migrations add InitialCreate
  21. Snippet: dotnet ef database update