Minimal APIs en C#

08 Aug 2021 5 min (0) Comentarios

Con la llegada de .NET 6, C# nos permite crear lo que se llaman “minimal APIs” que básicamente es la adaptación de lo que ya tenemos disponible en .NET 5 con Top level programs a las API.

 

En este vídeo vamos a ver como crear y utilizar minimal APIs así como mi opinión personal. 

 

 

 

1 - Mi opinión personal sobre minimal APIs

Primero de todo quiero empezar con mi opinión personal. Esto es debido a que llevo un tiempo pensando sobre esta nueva funcionalidad del lenguaje y finalmente tengo una opinión ya formada. 

 

Desde la llegada de .NET 5 y sus programas de alto nivel yo ya veía que algo así estaba por venir, y no tengo claro que sea algo beneficioso a largo plazo para los desarrolladores. Y me explico, tanto los programas de alto nivel como las minimal API’s son funcionalidades muy buenas para atraer a nuevos desarrolladores al lenguaje, pero con ellas es muy difícil hacer aplicaciones extensas.

 

Por ejemplo, un caso de uso que sí que le veo es para hacer pequeñas aplicaciones, como scripts que harías en otros lenguajes como python o por ejemplo funciones serverless. Personalmente tengo experiencia con NodeJS y la experiencia que tengo es porque era muy fácil crear funciones serverless en AWS cuando estas eran pequeñas, donde en C# tenía un proyecto, tener que compilar, etc, en NodeJS era un simple fichero de 30 líneas.

 

Pero esta es mi opinión, basada en mi experiencia personal, Microsoft tiene un equipo para decir las funcionalidades, que seguramente haya pensado en muchos otros casos de uso. Aunque sigo pensando que lo principal es atraer nuevos usuarios, lo cual es bueno.

 

Me gustaría saber tu opinión si quieres compartirla puedes responder a este tweet.

 

 

2 - Crear una minimal API en C# 

Por ahora (Agosto 2021) .NET 6 sigue en versión preview y no está disponible como plantilla en ninguna versión de visual studio u otro IDE, la única forma de crear una minimal api es a través de la línea de comandos con el siguente comando:

dotnet new web -o MinimalApi
  • Nota: alternativamente puedes crear todos los ficheros a mano, necesitarás el program.cs, .csproj y appsettings.json.
  • Nota2: La otra opción es crear una aplicación de consola, cambiar el targetFramework por .net6.0 y eliminar todo el contenido de program.cs
<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <LangVersion>preview</LangVersion>
  </PropertyGroup>
</Project>

 

Y si hemos creado nuestra minimal aplicación utilizando el comando anterior nuestro program.cs contendrá el siguiente código: 

using System;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Hosting;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}

app.MapGet("/", () => "Hola NetMentor!");

app.Run();

 

En el código que nos viene, tenemos todo lo que necesitamos para ejecutarlo desde la línea de comandos con el comando dotnet run y este sería el resultado: 

minimal api result

Que el código funcione es posible debido a que Microsoft.AspNetCore.Builder provee una clase llamada WebApplication que contiene un método CreateBuilder el cual una vez lo construimos utilizando .build() nos genera la pipeline de HTTP la cual permite recibir llamadas HTTP/HTTPS

 

Y junto a la pipeline, disponemos de los extension methods Map, MapGet, MapPost, MapPut,  los cuales reciben un patrón que actúa como la url que esperamos y un delegado para ejecutar la acción indicada. 

En nuestro caso sería la siguiente: 

app.MapGet("/", () => "Hola Netmentor!");

app.MapGet("/{id}", (string id) => $"Simulación del id: {id}");

Un endpoint es simplemente nuestra url y el otro es url/id el cual imprime un mensaje.

 

 

3 - Otras funcionalidades posibles con Minimal APIs

Las minimal apis son aplicaciones completas, por lo que podemos hacer lo que queramos en ellas, podemos crear clases y procesos como haríamos en cualquier otro tipo de aplicación.

 

Por ello podemos implementar aplicaciones de terceros como por ejemplo AutoMapper, Dapper para nuestras conexiones sql, o incluso ineyeccion de dependencias si incluimos el paquete Microsoft.Extensions.DependencyInjection.Abstractions, pero como he explicado antes creo que incluir muchas clases en nuestras minimal APIs es contraproducente, para aplicaciones grandes veo una solución mas aceptable utilizar nuestras APIs normales.

 

3.1 Añadir swagger to a minimal API

Para añadir soporte para swagger lo único que debemos hacer es incluir la referencia al paquete Swashbuckle.AspNetCore y un par de líneas a nuestro código: 

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();  //<- esta líena
builder.Services.AddSwaggerGen(); //<- esta líena
var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}

app.UseSwagger(); //<- esta línea

app.MapGet("/", () => "Hola NetMentor!");
app.UseSwaggerUI();  //<- esta línea
app.Run();

Ahora únicamente debemos ir al endpoint https://localhost:5001/swagger  para poder ver la interfaz de swagger.

 

swagger en minimal api

 

Conclusión

  • En este post he dado mi opinión sobre minimal APIs y sobre top level programs. 
  • Como crear minimal APIs en C# 

Uso del bloqueador de anuncios adblock

Hola!

Primero de todo bienvenido a la web de NetMentor donde podrás aprender programación en C# y .NET desde un nivel de principiante hasta más avanzado.


Yo entiendo que utilices un bloqueador de anuncios como AdBlock, Ublock o el propio navegador Brave. Pero te tengo que pedir por favor que desactives el bloqueador para esta web.


Intento personalmente no poner mucha publicidad, la justa para pagar el servidor y por supuesto que no sea intrusiva; Si pese a ello piensas que es intrusiva siempre me puedes escribir por privado o por Twitter a @NetMentorTW.


Si ya lo has desactivado, por favor recarga la página.


Un saludo y muchas gracias por tu colaboración

© copyright 2024 NetMentor | Todos los derechos reservados | RSS Feed

Buy me a coffee Invitame a un café