Minimal APIs .NET 8+: Desenvolva Microservices em 3 Linhas

APIs🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. que cabem em um tweet? Com as Minimal APIs do .NET 8+, você cria endpoints poderosos com menos código que um pedido de delivery! Perfeito para microservices🚀 Kubernetes: Orquestração de Microservices na Nuvem!🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade., serverless e protótipos ultra-rápidos.

🔍 Imagine construir uma casa só com o essencial: sem paredes falsas, só o que importa. É isso que Minimal APIs traz para o desenvolvimento web!

📌 Índice🔗

🧠 O Que São Minimal APIs?🔗

MVC sem o drama! Minimal APIs são uma abordagem simplificada para criar APIs HTTP no ASP.NET Core🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real., onde rotas e handlers ficam tudo no Program.cs (ou quase). Introduzidas no .NET 6 e aprimoradas no .NET 8, elas eliminam boilerplate como controllers🛠️ Controllers: Rotas que Respondem como Mágica!🛠️ Controllers: Rotas que Respondem como Mágica!Aprenda a criar e configurar controllers no ASP.NET Core com dicas práticas, exemplos de rotas e integração de serviços, elevando a qualidade da sua API. e configurações complexas.

var app = WebApplication.Create(args);
app.MapGet("/", () => "Hello NASA! 🚀");
app.Run();
👉 Compare com MVC tradicional:
MVCMinimal APIs
ArquivosControllersEndpoints inline
ConfiguraçãoStartup.csProgram.cs
BoilerplateAltoQuase zero

🏆 Vantagens: Por Que Usar?🔗

1. Simplicidade Radical: Menos arquivos = menos complexidade acidental

2. Performance🔄 StringBuilder: Quando Concatenar Strings Vira um Pesadelo!🔄 StringBuilder: Quando Concatenar Strings Vira um Pesadelo!Descubra como o StringBuilder otimiza a concatenação em C#, evitando desperdício de memória e melhorando a performance das aplicações. Veja exemplos práticos! Brutal: 20% menos overhead que controllers🛠️ Controllers: Rotas que Respondem como Mágica!🛠️ Controllers: Rotas que Respondem como Mágica!Aprenda a criar e configurar controllers no ASP.NET Core com dicas práticas, exemplos de rotas e integração de serviços, elevando a qualidade da sua API.

3. Curva de Aprendizado Suave: Ideal para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! iniciantes

4. Cloud-Native: Perfeito para serverless (Azure Functions⚡ Azure Functions: Serverless sem Mistérios!⚡ Azure Functions: Serverless sem Mistérios!Aprenda a criar aplicações escaláveis com Azure Functions e modelo serverless. Descubra gatilhos, bindings e melhores práticas para o seu código., AWS Lambda)

5. Flexibilidade: Misture com MVC se precisar

6. OpenAPI📄 Swagger/OpenAPI: Documente sua API Automaticamente!📄 Swagger/OpenAPI: Documente sua API Automaticamente!Descubra como gerar documentação interativa e automatizada em APIs com o Swagger/OpenAPI. Aprenda a configurar no .NET e testar endpoints facilmente. Integrado: Documentação automática📄 Swagger/OpenAPI: Documente sua API Automaticamente!📄 Swagger/OpenAPI: Documente sua API Automaticamente!Descubra como gerar documentação interativa e automatizada em APIs com o Swagger/OpenAPI. Aprenda a configurar no .NET e testar endpoints facilmente. com Swagger

💡 "É como trocar um caminhão por uma moto: vai direto ao ponto!"

🚀 Primeiros Passos: Hello World em 3 Linhas🔗

Passo 1: Crie um projeto🤝 GitHub Básico: Versionamento para Iniciantes!🤝 GitHub Básico: Versionamento para Iniciantes!Descubra como o GitHub facilita colaboração, versionamento e organização de código com este tutorial prático e essencial para desenvolvedores iniciantes. vazio:

dotnet new web -o MinimalApiDemo

Passo 2: Edite Program.cs:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/hello", (string nome) => $"Olá, {nome}! 👋");
app.MapPost("/upload", (IFormFile file) => Results.Ok(file.FileName));
app.Run();

Passo 3: Execute🔍 Comandos: Desacople Ações dos Botões!🔍 Comandos: Desacople Ações dos Botões!Aprenda a implementar comandos em C# para desacoplar lógica e interface usando MVVM, com exemplos práticos e dicas para melhor testabilidade e manutenção. e teste:

curl http://localhost:5000/hello?nome=Maria

🛣️ Rotas e Model Binding🔗

Rotas Dinâmicas:

app.MapGet("/produtos/{id}", async (int id, ProductService service)
    => await service.GetProductById(id));

Model Binding Automático:

public record User(string Name, string Email);
app.MapPost("/users", (User user) => Results.Created($"/users/{user.Email}", user));

Parâmetros Complexos:

app.MapGet("/todos/{id}", (int id) => todos[id]);

🧙 Funcionalidades Avançadas🔗

Validação com FluentValidation:

app.MapPost("/clientes", (Cliente cliente) => {
    var validator = new ClienteValidator();
    var results = validator.Validate(cliente);
    return results.IsValid
        ? Results.Created($"/clientes/{cliente.Id}", cliente)
        : Results.ValidationProblem(results.ToDictionary());
});

Injeção de Dependência:

app.MapGet("/produtos", (ProductService service) => service.GetAll());

Filtros Globais:

app.AddEndpointFilter<ValidationFilter>();

📘 Documentação com Swagger/OpenAPI🔗

Passo 1: Instale o pacote:

dotnet add package Swashbuckle.AspNetCore

Passo 2: Configure no Program.cs:

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
app.UseSwagger();
app.UseSwaggerUI();

Resultado:

Acesse http://localhost:5000/swagger📄 Swagger/OpenAPI: Documente sua API Automaticamente!📄 Swagger/OpenAPI: Documente sua API Automaticamente!Descubra como gerar documentação interativa e automatizada em APIs com o Swagger/OpenAPI. Aprenda a configurar no .NET e testar endpoints facilmente. para ver a documentação interativa📄 Swagger/OpenAPI: Documente sua API Automaticamente!📄 Swagger/OpenAPI: Documente sua API Automaticamente!Descubra como gerar documentação interativa e automatizada em APIs com o Swagger/OpenAPI. Aprenda a configurar no .NET e testar endpoints facilmente.!

Swagger UI

⚡ Performance: Turbo .NET 8🔗

Benchmark⏱️ Benchmark.NET: Meça a Velocidade do Seu Código!⏱️ Benchmark.NET: Meça a Velocidade do Seu Código!Aprenda a usar o Benchmark.NET para medir a performance de seu código com precisão. Descubra dicas, práticas confiáveis e evite erros comuns. contra MVC (Requisições por segundo):

CenárioMinimal APIsMVC
GET simples210,000180,000
POST com validação150,000120,000
Startup Time80ms120ms
💡 Dica: Use Native AOT no .NET 8 para binaries 80% menores!

🛠️ Middlewares e Extensibilidade🔗

Logging Global:

app.Use(async (context, next) =>
{
    Console.WriteLine($"Request: {context.Request.Path}");
    await next();
});

Tratamento de Erros:

app.UseExceptionHandler("/error");
app.Map("/error", () => "Ocorreu um erro inesperado.");

Autenticação:

app.UseAuthentication();
app.UseAuthorization();

🔄 Migrando de MVC/Web API🔗

Do Controller🛠️ Controllers: Rotas que Respondem como Mágica!🛠️ Controllers: Rotas que Respondem como Mágica!Aprenda a criar e configurar controllers no ASP.NET Core com dicas práticas, exemplos de rotas e integração de serviços, elevando a qualidade da sua API.:

[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase
{
    [HttpGet]
    public IActionResult Get() => Ok(_users);
}

Para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! Minimal API:

app.MapGet("/api/users", (UserService service) => service.GetAll());

Benefícios:

📜 Boas Práticas🔗

1. Estrutura Modular: Separe endpoints📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. com MapGroup

var users = app.MapGroup("/users");
users.MapGet("/", GetUsers);
users.MapPost("/", CreateUser);

2. Documentação Detalhada:

app.MapGet("/weather", () => ...)
   .WithSummary("Previsão do tempo")
   .WithDescription("Busca dados da estação meteorológica local");

3. Versionamento🤝 GitHub Básico: Versionamento para Iniciantes!🤝 GitHub Básico: Versionamento para Iniciantes!Descubra como o GitHub facilita colaboração, versionamento e organização de código com este tutorial prático e essencial para desenvolvedores iniciantes.:

var v1 = app.MapGroup("/v1");
v1.MapGet("/todos", GetTodosV1);

4. Testes de Integração🧩 Testes de Integração: Valide Sistemas Complexos!🧩 Testes de Integração: Valide Sistemas Complexos!Aprenda a implementar testes de integração em C# com exemplos práticos usando xUnit, EF Core e SQLite para garantir a comunicação efetiva entre sistemas.:

[Test]
public async Task Get_ReturnsHelloWorld()
{
    var client = _factory.CreateClient();
    var response = await client.GetAsync("/");
    response.EnsureSuccessStatusCode();
}

🌍 Casos de Uso Reais🔗

1. Microservices🚀 Kubernetes: Orquestração de Microservices na Nuvem!🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade. Leves: APIs para IoT com baixo consumo de memória🔄 StringBuilder: Quando Concatenar Strings Vira um Pesadelo!🔄 StringBuilder: Quando Concatenar Strings Vira um Pesadelo!Descubra como o StringBuilder otimiza a concatenação em C#, evitando desperdício de memória e melhorando a performance das aplicações. Veja exemplos práticos!

2. Serverless⚡ Azure Functions: Serverless sem Mistérios!⚡ Azure Functions: Serverless sem Mistérios!Aprenda a criar aplicações escaláveis com Azure Functions e modelo serverless. Descubra gatilhos, bindings e melhores práticas para o seu código. Functions: Azure Functions⚡ Azure Functions: Serverless sem Mistérios!⚡ Azure Functions: Serverless sem Mistérios!Aprenda a criar aplicações escaláveis com Azure Functions e modelo serverless. Descubra gatilhos, bindings e melhores práticas para o seu código. com cold start ultra-rápido

3. Prototipagem Rápida: MVP para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! validar ideias em horas

4. Endpoints📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. Específicos: Health checks, webhooks simples

🔌 Exemplo real: API de coleta de dados de sensores em fazendas, processando 10k req/s com 128MB RAM!

🎯 Desafio Prático: API de Tarefas em 15 Minutos🔗

Requisitos:

Solução:

var tarefas = new List<Tarefa>();
var group = app.MapGroup("/tarefas");
group.MapPost("/", (Tarefa tarefa) => {
    if (string.IsNullOrEmpty(tarefa.Titulo))
        return Results.BadRequest("Título obrigatório!");
    tarefas.Add(tarefa);
    return Results.Created($"/tarefas/{tarefa.Id}", tarefa);
});
group.MapGet("/", () => tarefas);
group.MapGet("/{id}", (Guid id) =>
    tarefas.FirstOrDefault(t => t.Id == id));
public record Tarefa(Guid Id, string Titulo, string Descricao);

🚀 Conclusão🔗

Minimal APIs revolucionaram o desenvolvimento web no .NET, oferecendo simplicidade, performance🔄 StringBuilder: Quando Concatenar Strings Vira um Pesadelo!🔄 StringBuilder: Quando Concatenar Strings Vira um Pesadelo!Descubra como o StringBuilder otimiza a concatenação em C#, evitando desperdício de memória e melhorando a performance das aplicações. Veja exemplos práticos! e flexibilidade. Seja para:

Elas são a ferramenta ideal! Combinadas com recursos📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. do .NET 8+ como Native AOT📦 Native AOT para APIs: Tamanho Minúsculo, Performance Máxima!📦 Native AOT para APIs: Tamanho Minúsculo, Performance Máxima!Descubra como o Native AOT no .NET 8+ transforma APIs com binários compactos, startup ultrarrápida e desempenho superior em ambientes cloud. e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. Dynamic PGO🚀 Dynamic PGO: Aceleração Automática em Runtime!🚀 Dynamic PGO: Aceleração Automática em Runtime!Descubra como o Dynamic PGO revoluciona a performance do .NET 8 com otimizações em tempo real, ganhando até 30% mais velocidade sem recompilar., você cria soluções enxutas que escalam brutalmente.

Próximos passos:

1. Experimente o desafio prático

2. Integre com um banco de dados (ex: SQLite, MongoDB)

3. Explore autenticação🔑 Autenticação JWT: Proteja sua API com Tokens!🔑 Autenticação JWT: Proteja sua API com Tokens!Descubra como implementar autenticação JWT no ASP.NET Core com exemplos práticos, boas práticas de segurança e dicas para proteger suas APIs de forma eficiente. com JWT

  • Codifique como um ninja, entregue como um foguete! 🚀
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.

Referências🔗

Compartilhar artigo

Artigos Relacionados