Imagine conseguir escrever o mínimo necessário para ter uma Web API inteira, com recursos de acesso a dados e documentada com Swagger. Será que isso é possível? Neste artigo falaremos das Minimal APIs, um novo recurso apresentado oficialmente à comunidade de desenvolvedores junto ao .NET 6.0 e que nos permite esse tipo de simplificação.
Quando estamos criando um serviço web usando a plataforma .NET, muito provavelmente usaremos os recursos das Web APIs dentre as opções disponíveis, porque elas já estruturam um backend para desenvolvermos usando C#. Apesar da estrutura de um projeto deste tipo ter evoluído com o passar do tempo, ainda ficamos dependentes de muitos recursos e configurações.
Autor(a)
andre-bessa1
Inscreva-se em nossa Newsletter
Fique por dentro de conteúdos, insights e oportunidades do universo tech. Receba novidades e lançamentos direto no seu e-mail.
E aí vamos conferir como as Minimal APIs realmente funcionam ? 😉
O que é uma Minimal API?
Com a chegada do .NET 6, a Microsoft disponibilizou o recurso das Minimal APIs, que foram pensadas para permitir a criação de APIs HTTP que utilizem menos recursos, sendo uma ótima solução para implementação de microsserviços e aplicativos que consumam o mínimo de dependências do ASP .NET Core, por exemplo.
Então, que tal criar uma API de cadastro de pessoas escrevendo o mínimo de linhas de código o possível? Para isso teremos uma lista em memória e como pré-requisitos, usaremos o NET 6 e o Visual Studio Community 2022, mas fique a vontade para usar outra IDE que seja de sua escolha como o VS Code por exemplo.
Ah, vamos definir também um nome para nosso projeto, que será “Alura.MinimalAPI”.
E sem esquecer de selecionar a versão 6.0 do .NET Core.
Repare na estrutura do projeto criado:
Dessa forma, já temos uma API funcional. Agora execute o projeto clicando no botão ”Run” no menu superior do Visual Studio Community. No navegador padrão será exibida a página principal encontrada em “localhost:7274” e será exibida a mensagem “Hello World”.
Bem bacana! 😉 Mas queremos desenvolver mais do que um “Hello world”, certo? Vamos criar uma solução que funcione em memória, uma lista de pessoas, e realizar as operações de inserção, atualização, remoção e listagem.
Em nosso projeto de exemplo adicionamos um diretório Model e vamos criar as classes Pessoa e RepositorioDePessoas.
Com base nesta classe, criamos uma outra com algumas funcionalidades para manipular uma lista de pessoas em memória, a RepositorioDePessoa. Vamos usar este recurso para simular uma base de dados. O código dela será:
Repare que nesses códigos de classes não temos aqueles using, responsáveis pela importação de bibliotecas padrão. Para onde eles foram? Onde estão as bibliotecas?
Global usings
A plataforma .NET permite agora a configuração dos nossos projetos com as global usings. Com elas temos um trecho específico no código onde ficarão definidas as importações das bibliotecas básicas que usarmos. Na criação do projeto, a opção das global usings já estará habilitada no arquivo “.csproject”.
Portanto, as seguintes bibliotecas serão configuradas de maneira implícita no projeto:
De volta ao projeto da minimal API, vamos configurá-lo para trabalhar com o Swagger. Como criamos um projeto vazio, adicione o pacote via NuGet, acessando pelo menu superior > “Ferramentas”> “Gerenciador de pacotes do Nuget” > “Gerenciador de pacotes do NuGet para essa solução…”, como na imagem abaixo:
Agora vamos à definição de todo o código da nossa classe Program.CS:
usingAlura.MinimalAPI.Alura.MinimalAPI.Model;
var builder = WebApplication.CreateBuilder(args);
//Habilitando o swagger
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
//instanciando o repositório em memória.var repositorio = newRepositorioDePessoas(true);
app.UseSwagger();// Ativando o Swagger
app.(, );
app.(, {
repositorio.();
});
app.(, {
repositorio.(cpf);
});
app.(, {
repositorio.(pessoa);
});
app.(, {
repositorio.(pessoa);
});
app.(, {
repositorio.(cpf);
});
app.();
app.();
Repare como nossa classe está bem mais enxuta agora que criamos um serviço web com 50 linhas e endpoints documentados usando Swagger. A escrita de um endpoint também está mais simples devido ao uso de uma expressão lambda. Por exemplo:
A ideia de simplificar a escrita de códigos tem se tornado mais presente na rotina de desenvolvimento, se fazendo notar em outras linguagens mais modernas, como Python. Existe uma tendência ao minimalismo, ou seja, a abrir mão do que não for essencial para o funcionamento de nossos softwares, inclusive no universo .NET.
Mas que objetivos a Microsoft tenta atingir com uma solução de API mínima? Vamos elencar alguns deles a seguir:
Para os iniciantes em programação, diminuir a complexidade do código;
Reduzir a necessidade de utilizar alguns recursos que podem não ser essenciais para uma solução ASP.NET como controllers, roteamento, filtros, etc;
Adotar o minimalismo a nível de API, buscando maior facilidade de entendimento do código que está sendo gerado.;
Pensar em aplicações que sejam ao mesmo tempo simples e escaláveis, ou seja, tenham um código legível, além da capacidade de expandir o armazenamento de dados ou atendimento de usuários.
Conclusão
A plataforma .NET tem evoluído a passos largos nos últimos anos e incorporou diversos recursos para tornar a plataforma de desenvolvimento mais dinâmica e simples, beneficiando pessoas novas na área sem deixar de agradar as mais experientes.
Nesse sentido, simplificar o desenvolvimento de uma API ajuda bastante e reflete a intenção da Microsoft de ouvir as demandas da comunidade, oferecendo soluções cada vez mais atraentes para todos os públicos.
Ficamos então com o lema minimalista “Menos é mais”. Até a próxima! 😉
Para conhecer mais sobre programação com .NET e mergulhar mais fundo em tecnologia, veja: