Criando uma api com .NET 6 — parte 1
Em 2019 escrevi um artigo intitulado “Criando a primeira API com .NET Core” artigo este que na data de hoje está chegando à quase 5.000 visualizações.
Dada a relevância do tópico, resolvi escrever um artigo atualizado, demonstrando o mesmo exemplo, mas agora fazendo essa API utilizando .NET 6 com Minimal Api!
Então para começar, desta vez não vamos nos prender à somente criá-la dentro do Visual Studio, nesta primeira parte faremos utilizando o Visual Studio, mas na outra parte, faremos o mesmo com VCCode !
Criando pelo Visual Studio 2022
Então para começar, vamos abrir o Visual Studio e escolher o template “Asp Net Core Empty” para criar um projeto limpo.
Pronto, então agora temos nosso projeto criado, e na área em destaque em vermelho, você pode ver os objetos criados.
Vamos então nos concentrarmos no arquivo Program.cs, pois agora no .NET 6, a estrutura de inicialização foi simplificada e será um pouco diferente do que estávamos acostumados (veja minha postagem anterior sobre Minimal Api´s).
Caso executemos o programa com a configuração padrão o navegador vai exibir apenas um “Hello World”.
Isto acontece por que o método “get” que está definido no program.cs está com uma saída de texto padrão conforme vemos na linha 4 do código.
Então vamos dar início à criação de uma API para cadastramento de produtos, bem básica somente para entendermos os conceitos principais.
Primeiramente, vamos criar uma classe para nossos produtos, chamando-a de “ProdutosModel”.
Então criada a classe, vamos inserir as suas propriedades conforme a imagem abaixo:
Então se pensarmos numa API com funções CRUD (Create/Read/Update/Delete) temos que criar seus endpoints, é aí que estará a diferença em relação ao que fazíamos ao utilizar Controllers, do que vamos fazer desta vez.
Primeiro vamos criar uma classe de serviço, onde vamos colocar 2 métodos, um que lista todos os itens, e outro que lista um item específico.
Para isto, começaremos criando uma Interface, que chamaremos de “IProdutosService”
E depois a sua respectiva classe que chamaremos de “ProdutosService”, onde fizemos uma lista “fake” para podermos devolver dados na nossa consulta. Muita calma nessa hora, depois faremos o uso de banco de dados…..
Os métodos implementados “GetOne” e “GetAll” devolvem respectivamente um produto ou todos os produtos, e serão utilizados para devolver os dados quando fizermos uma requisição à nossa API.
Primeiramente vamos pensar em 2 endpoints para Exibir um item, ou Exibir vários itens.
Que serão construídos utilizando o conceito de Minimal Api (saiba mais aqui), portanto serão implementados inicialmente dentro do Program.cs
As mudanças realizadas são:
- Inclusão da injeção de dependência da classe de serviços e da sua interface (se não sabe do que se trata, há um artigo mais antigo explicando)
- Criação dos dois métodos, para obter todos e obter um produto pelo seu id específico.
Vamos detalhar o primeiro item:
- rota do endpoint — aqui declara-se como será o endereço em que vamos submeter a nossa consulta
- origem do objeto que estamos inserindo na nossa chamada, como vamos utilizar um serviço que foi instanciado via Injeção de Dependência (é obtido dos serviços) então o uso de “FromService” se faz necessário.
- Declaramos o objeto _service para usarmos uma instância de “IProdutoService” ou seja, a nossa classe “ProdutoService”.
- vamos instanciar uma lista, a partir da chamada do método “GetAll” do nosso “ProdutoService”.
- Vamos devolver um resultado indicando sucesso “Results.Ok” com a lista de objetos, que será devolvida em formato JSON.
O resultado quando chamado o endpoint via navegador ou outra ferramenta será este:
Agora vamos ver como funciona o segundo método
Podemos ver que a única diferença é a utilização de um parâmetro, para identificar o produto que queremos buscar.
- informamos na rota o nome do parâmetro (no caso id)
- inserimos no método a origem “FromRoute” dizendo que o parâmetro virá da rota e declaramos o tipo e nome da variável.
- fazemos a chamada para a classe de serviço, que buscará na lista existente.
E o resultado ao executarmos é este:
Portanto agora podemos dizer que o básico da API está feito, temos 2 métodos implementados.
FUNCIONA !!
Agora vamos incrementar um pouco, precisamos de uma documentação para facilitar nossos testes, então vamos adicionar o Swagger !
Onde após instalarmos o pacote necessário, teremos que fazer a inclusão de 2 blocos de comandos no nosso program.cs.
O Swagger tem outras opções, onde podemos colocar título para a aplicação, dentre outras informações, mas nesse momento vamos focar apenas no básico.
Agora se executarmos na nossa máquina e chamarmos o endereço \swagger, aparecerá esta interface, onde podemos realizar testes e validar o uso da nossa API no browser
Maiores detalhes para implementar o Swagger: https://docs.microsoft.com/en-us/aspnet/core/tutorials/getting-started-with-swashbuckle?view=aspnetcore-6.0&tabs=visual-studio
Na próxima parte, faremos o mesmo projeto, só que agora utilizando o linha de comando e VSCODE.
Caso queira obter o código fonte, acesse-o em https://github.com/NIZZOLA/AulaWebAPI2022