Minimal API è una nuova funzionalità di ASP.NET Core introdotta con .NET 6, che consente di creare un servizio web minimizzando le dipendenze e le dimensioni della nostra applicazione - idealmente, la sola classe Program!
Per creare un progetto di questo tipo, da Visual Studio 2022 è sufficiente deselezionare la checkbox "Use controllers" nel wizard di setup:
Se stiamo usando DotNet CLI, invece, dobbiamo specificare l'opzione minimal:
dotnet new webapi -minimal
A questo punto, ci troveremo un progetto che, come accennato, contiene solo il file Program.cs, il cui codice è grossomodo simile al seguente:
var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); // Configure the HTTP request pipeline. app.UseHttpsRedirection(); var summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; app.MapGet("/weatherforecast", () => { var forecast = Enumerable.Range(1, 5).Select(index => new WeatherForecast ( DateTime.Now.AddDays(index), Random.Shared.Next(-20, 55), summaries[Random.Shared.Next(summaries.Length)] )) .ToArray(); return forecast; }); app.Run();
Il codice è piuttosto esplicativo, e l'unico endpoint in GET disponibile è dichiarato tramite il metodo MapGet, specificandone il path e la relativa logica tramite una lambda. In maniera del tutto analoga, possiamo usare MapPost, MapPut e MapDelete per dichiarare endpoint con differenti verbi HTTP.
Se abbiamo bisogno di parametri, dobbiamo indicarli nel routing e poi specificarli nella lambda stessa:
app.MapGet("/people/{id}", (int id) => { if (id == 0) return Results.NotFound(); return Results.Json(new Person { Name = "Marco" }); });
Nell'esempio in alto, abbiamo anche sfruttato la classe statica Results per restituire NotFound o un oggetto Json a seconda del valore di Id in input.
Nel caso di una POST, invece, il primo parametro della lambda rappresenta il contenuto del body della richiesta:
app.MapPost("/people", (Person person) => { // save the person // ... return Results.Accepted; });
Sebbene Minimal API abbiano alcune limitazioni rispetto ai normali controller (per esempio non supportano i Filter, o il ModelBinding), rappresentano comunque un modo veloce e conciso per creare microservizi senza troppo codice boilerplate.
Nei prossimi script torneremo su questo argomento, e parleremo di altri concetti importanti, come il supporto per la security o per la dependency injection.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Disabilitare automaticamente un workflow di GitHub
Copiare automaticamente le secret tra più repository di GitHub
Sostituire la GitHub Action di login su private registry
Determinare lo stato di un pod in Kubernetes
Eseguire attività pianificate con Azure Container Jobs
Creazione di plugin per Tailwind CSS: espandere le Funzionalità del Framework
Usare il versioning con i controller di ASP.NET Core Web API
Gestire undefined e partial nelle reactive forms di Angular
Effettuare chiamate con versioning da Blazor ad ASP.NET Core
Creare form tipizzati con Angular
Configurare dependabot per aggiornare le dipendenze di terze parti con GitHub Actions
Modificare i metadati nell'head dell'HTML di una Blazor Web App