Creare velocemente microservice grazie a minimal API di ASP.NET Core 6

di Marco De Sanctis, in ASP.NET Core,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi