ASP.NET Core - Organizando Minimal APIs


 Neste artigo veremos algumas formas de organizar as minimal APIs.

As minimal APIs ou APIs mínimas foram introduzidas no .NET 6 e são mais leves que os controladores sendo uma abordagem simplificada para criar APIs HTTP rápidas com ASP .NET Core.

Com as Minimal APIs, você pode criar uma API usando um único arquivo de código ou um número mínimo de arquivos. Em vez de configurar rotas em um arquivo separado, como é comum em estruturas tradicionais, você pode definir rotas diretamente no código, tornando o processo mais direto.

Aqui está um exemplo básico de uma Minimal API na plataforma .NET:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddEndpoints(endpoints =>
{
    endpoints.MapGet("/", () => "Hello, World!");
});

var app = builder.Build();

app.Run();

Organizar o código em projetos que utilizam Minimal APIs é crucial para manter o código legível, sustentável e fácil de manter. A organização eficiente do código facilita a colaboração entre membros da equipe, melhora a manutenção e ajuda a evitar a acumulação de complexidade desnecessária.

Vou apresentar a seguir duas formas de como organizar o código das minimal APIs :

  1. Usar método Local
  2. Usar método de Extensão
  3. Usar o Carter

1- Usando Método Local

Uma forma fácil de organizar APIs mínimas é usar um método local e neste método definir os endpoints. Para usar basta invocar o método a partir da classe Program.

Exemplo:

Crie um método local que não retorna nada na classe Program e inclua nele os seus endpoints:

...
var
app = builder.Build();

CreateDatabase(app);

app.UseSwagger();
app.UseSwaggerUI();
app.UseHttpsRedirection();

ProductsEndpoints(app);

app.Run();

void ProductsEndpoints(WebApplication app)
{
  app.MapGet(
"/products", (AppDbContext db) =>
  {
   
return Results.Ok(db.Products.ToList());
   });

   app.MapGet("/products/{id}", (AppDbContext db, int id) =>
   {
    
var product = db.Products.FirstOrDefault(p => p.Id == id);
    
return Results.Ok(product);
   });
}

2- Usando Método de extensão

Uma forma mais usada é criar métodos como métodos de extensão da classe WebApplication

Exemplo:

Crie uma classe estática e nesta classe defina o método de extensão para WebApplication:

using MinApiOrganiza.Context;
namespace MinApiOrganiza.Endpoints;
public static class ExtensionEndpoints
{
    public static void ProductsEndpointsExtensions(this WebApplication app)
    {
        app.MapGet("/products", (AppDbContext db) =>
        {
            return Results.Ok(db.Products.ToList());
        });

        app.MapGet("/products/{id}", (AppDbContext db, int id) =>
        {
            var product = db.Products.FirstOrDefault(p => p.Id == id);
            return Results.Ok(product);
        });
    }
}

2- Usando o Carter

O Carter é um framework que é uma camada fina de métodos de extensão e funcionalidades sobre a ASP.NET Core, permitindo que o código seja mais explícito, o roteamento mais elegante e além disso adiciona o suporte a Fluent Validation.

Para ver um exemplo completo usando o Carter acompanhe meu artigo neste link : ASP .NET Core -  Criando APIs com o framework Carter

Pegue o código do projeto aqui:  MinApiOrganiza.zip

"Jesus lhes respondeu, e disse: A minha doutrina não é minha, mas daquele que me enviou.
Se alguém quiser fazer a vontade dele, pela mesma doutrina conhecerá se ela é de Deus, ou se eu falo de mim mesmo."
João 7:16,17

Referências:


José Carlos Macoratti