Novidades do .NET 6: Minimal APIs em ASP.NET Core
Na semana passada (dias 25 a 27/Maio, terça a quinta) aconteceu a edição 2021 do Microsoft Build, a conferência anual da Microsoft para Desenvolvedores. Como de praxe, foram diversos os anúncios envolvendo a plataforma .NET. Os posts a seguir nos blogs oficiais do .NET e do ASP.NET destacam algumas dessas novidades:
Já publiquei inclusive neste blog 2 artigos cobrindo novidades que vieram com esta edição do Build, na qual foi disponibilizado o Preview 4 do .NET 6:
Novidades do .NET 6: HTTP Logging no ASP.NET Core
Novidades do .NET 6: melhorias em LINQ - MaxBy e MinBy
E produzi ainda outros posts baseados em recursos liberados em Previews anteriores:
Novidades do .NET 6: suporte a Hot Reload no ASP.NET Core
Novidades do .NET 6: melhorando a experiência na linha de comando com Response Files
E como estou abordando aqui novidades do Microsoft Build 2021, aproveito este espaço para um convite…
No dia 02/06/2021 (quarta) às 21:00 — horário de Brasília — teremos mais um evento online e gratuito no canal Coding Night.
Desta vez uma mesa redonda discutindo as novidades e os grandes anúncios do Build 2021. Um bate papo cobrindo tecnologias como .NET, C#, ASP.NET Core, MAUI, Visual Studio, Visual Studio Code, e Microsoft Azure!
Para participar faça sua inscrição no link a seguir, a transmissão acontecerá via YouTube:
Dentre as novidades para ASP.NET Core que integram o Preview 4 do .NET 6 temos agora a possibilidade de criação de minimal APIs… Mas o que seria isto na prática?
Supondo que criemos por meio do comando abaixo um novo projeto em .NET 5, utilizando o template ASP.NET Core Empty:
dotnet new web -n ExemploSimpleWebApp
Analisando a estrutura do projeto criado no Visual Studio Code notaremos que constam no mesmo arquivos com as implementações das classes Program e Startup:
Na listagem a seguir temos a implementação da classe Program:
E na próxima o código que define Startup:
Estamos sem dúvidas diante de um template (ASP.NET Core Empty) que considera o mínimo de configurações para a criação de uma Web App baseada em ASP.NET Core. Já disponibilizei inclusive exemplos envolvendo o uso deste template em aplicações para monitoramento de Health Checks no meu GitHub, além de posts aqui no blog:
.NET 5 + Health Checks: exemplos de implementação em projetos ASP.NET Core
.NET 5, ASP.NET Core, APIs REST e desenvolvimento Back-End: dicas para o dia a dia | Abril-2021
E no que o novo conceito de Minimal APIs difere ao considerarmos o ASP.NET Core em .NET 6?
Criando com a instrução a seguir um projeto ASP.NET Core de forma similar ao exemplo em .NET 5 (mais uma vez com o template ASP.NET Core Empty):
dotnet new web -n ExemploMinimalAPI
Teremos agora uma estrutura bem mais enxuta de projeto, contando apenas com os arquivos de configuração e o Program.cs (como demonstrado no próximo print com o Visual Studio Code):
E no caso específico de Program.cs, houve inclusive a omissão da classe Program e do método Main. Trata-se de um exemplo de utilização do recurso conhecido como Top Level Program (este conceito introduzido com o C# 9), em que existe a opção de não utilizar toda a estrutura convencional de inicialização de uma aplicação:
Esta abordagem possibilita certamente um código reduzido e mais direto em projetos Web simples, em que dependeríamos tradicionalmente da classe Startup e eventuais implementações de Controllers.
Na implementação a seguir efetuei algumas alterações, de forma que a aplicação se comporte como uma API REST extremamente simplificada (exibindo o horário atual e mensagens de texto):
Na próxima imagem podemos observar este exemplo em execução:
Os fontes deste exemplo já foram disponibilizados no GitHub:
https://github.com/renatogroffe/ASPNETCore6-Preview4-MinimalAPIs-REST_API
Referências
.NET 6 - Guia de Referência: artigos, vídeos e exemplos de utilização
ASP.NET Core updates in .NET 6 Preview 4 | ASP.NET Blog
.NET 5 + Health Checks: exemplos de implementação em projetos ASP.NET Core
.NET 5, ASP.NET Core, APIs REST e desenvolvimento Back-End: dicas para o dia a dia | Abril-2021