Este artigo é parte da série:

Neste artigo, vamos criar dois endpoints utilizando C# e .NET Core. Um deles terá retorno simples, enquanto o segundo terá como retorno uma lista de objetos em formato JSON.
1. Para iniciar o trabalho, vamos abrir uma nova branch no GitHub. Para fins desse exemplo eu a chamei de “v1”.

2. Um controller é um arquivo que contém os códigos de programação propriamente ditos do nosso programa, a camada de regra de negócios. Vamos então criar nosso primeiro controller, que vai ser chamar “T01Controller.cs”, seguindo os passos:
– Add – Controllers
– Mudar o tipo para API do lado esquerdo do menu
– Selecionar API Controller Empty




3. Um model contém as estruturas de dados que o código vai manipular. Para fins de exemplo, vamos criar um model. Crie uma pasta com o nome “Models” e Dentro dela uma classe com o nosso primeiro model, que vou chamar de “UF”. Dessa forma poderemos trabalhar com uma lista de objetos tipada.

4. Eu chamei a classe de UF pois ela terá uma lista de UFs e suas capitais. O conteúdo do código é o seguinte:
namespace Treino_REST_02.Models { public class UF { public int Id { get; set; } public required string Nome { get; set; } public string? Capital { get; set; } } }
A linha 6 possui o modficador “required” para validar que o conteúdo do campo será preenchido quando o objeto for criado, enquanto a linha 7 está com o modificador ? junto ao tipo string para informar que o conteúdo pode ser nulo. Em ambos os casos o comando poderia ser simplesmente “public string …”
5. Agora vamos preencher o nosso cotroller “T01Controller.cs” com um código bem simples que gera dois tipos de retorno. O método “Soma” vai retornar o resultado da soma de dois valores, enquanto o método “ListaUF” vai entregar uma relação de objetos do tipo UF, que criamos no passo anterior. O retorno do método “Soma” é apenas um valor, enquanto o método “ListaUF” retorna uma lista de objetos em formato JSON.
using Microsoft.AspNetCore.Mvc; using Treino_REST_02.Models; namespace Treino_REST_02.Controllers { [Route("api/Soma")] [ApiController] public class SomaController : ControllerBase { [HttpPost(Name = "Soma")] public int Soma(int A, int B) { return A + B; } } [Route("api/ListaUF")] [ApiController] public class ListaUFController : ControllerBase { [HttpGet(Name = "Divisão")] public IEnumerable<UF> ListaUF() { return new List<UF> { new UF {Id = 1, Nome = "RJ", Capital = "Rio de Janeiro" }, new UF {Id = 2, Nome = "SP", Capital = "São Paulo" }, new UF {Id = 3, Nome = "BA", Capital = "Salvador" } }; } } }
E agora as explicações:
Linha 6:
O conteúdo original foi alterado porque mantendo Route como “api/[controller]”, o título que iria aparecer no Swagger seria o nome da classe, ou seja, “Soma”.
Linha 7:
Informa que a classe é uma API controller.
Linha 8:
Observe que a classe precisa herdar de ControllerBase.
Linhas 11 e 24:
Informa o verbo que será tratado na chamada HTTP, em nosso caso, Post e Get.
Execute o programa e observe que o Swagger, além de mostrar os dois endpoints que acabamos de criar, ainda mostra a estrutura do model “UF”.

Para finalizar vamos atualizar o GitHub.
- Dê um nome para o que terminamos de fazer e clicando em “Commit All” na aba “Git Changes”.
- Clique em “Push”.
- Clique em “View all commits”.
- Mude a branch para “Master”, no rodapé do Visual Studio.
- Faça o merge de v1 para master, com clique direito em v1 estando a master selecionada.
- Clique direito em “master” e então em “Sync” para efetivamente sincronizar com o GitHub.
- Agora a branch v1 já pode ser apagada.







Não esqueça de, sempre que for iniciar novas modificações, criar uma nova branch.
Por hoje é só, nos próximos artigos vamos aprender como implementar novos verbos e como enviar respostas com código diferente de 200 (OK).