Primeiros aprendizados com ASP.NET

Notas sobre rotas, injeção de dependência e respostas HTTP ao construir uma primeira API.

  • ASP.NET Core
  • API
  • C#

Construir uma API pequena é uma boa forma de entender como as peças do ASP.NET Core se conectam. O framework resolve bastante coisa, mas fica muito mais útil quando cada decisão deixa de parecer mágica.

O menor caminho útil

Uma Minimal API permite começar com poucas linhas e ainda exercitar roteamento, contratos e injeção de dependência.

var builder = WebApplication.CreateBuilder(args);
 
builder.Services.AddSingleton<WeatherService>();
 
var app = builder.Build();
 
app.MapGet("/weather/{city}", async (
    string city,
    WeatherService service,
    CancellationToken cancellationToken) =>
{
    var weather = await service.GetAsync(city, cancellationToken);
 
    return weather is null
        ? Results.NotFound(new { message = "Cidade não encontrada." })
        : Results.Ok(weather);
});
 
app.Run();

Três aprendizados iniciais

A rota também é um contrato

Nome, verbo HTTP, parâmetros e respostas fazem parte da experiência de quem consome a API. O endpoint precisa comunicar intenção antes mesmo de alguém abrir o código.

Dependências devem aparecer

Receber o serviço como parâmetro deixa claro o que o endpoint usa e facilita substituí-lo em testes. O contêiner não é um lugar para esconder acoplamento.

Respostas específicas ajudam

Retornar 404 quando o recurso não existe é mais informativo do que responder 200 com um objeto vazio. Status e corpo trabalham juntos.

O que testar em seguida

  • validação de entrada;
  • tratamento centralizado de erros;
  • documentação com OpenAPI;
  • testes de integração;
  • logs estruturados;
  • cancelamento de requisições.

O mais valioso nessa primeira API não é a quantidade de endpoints. É conseguir explicar por que cada peça existe e o que acontece quando algo falha.