Introdução: API REST em C# é Simples
Criar uma API REST moderna em C# usando ASP.NET Core é uma das tarefas mais requisitadas no desenvolvimento backend. Muitos desenvolvedores iniciantes pensam que escrever uma API completa exige semanas de preparação. Na realidade, usando as ferramentas certas, você pode criar uma API REST funcional em C# em literalmente 30 minutos.
Neste artigo, vamos detalhar na prática como escrever uma API REST em C# do zero. Criaremos um microsserviço simples para gerenciar uma lista de tarefas (Todo List) usando os recursos nativos do ASP.NET Core. Você aprenderá como configurar roteamento, implementar operações CRUD e testar a API via Swagger UI.
1. Configuração do Projeto em 5 Minutos
Primeiro, certifique-se de ter o .NET SDK 6.0 ou mais recente instalado. Caso contrário, faça o download no site oficial da Microsoft. Abra um terminal e execute os seguintes comandos:
dotnet new webapi -n TodoApicd TodoApicode .Esses comandos criarão um novo projeto Web API e o abrirão no Visual Studio Code. A estrutura do projeto inclui vários arquivos importantes:
Program.cs— ponto de entrada e configuração de serviçosControllers/— pasta para os controladores da APIappsettings.json— arquivo de configuração
Por padrão, o projeto já contém um controlador de exemplo WeatherForecastController. Vamos excluí-lo e criar o nosso.
Importante: Verifique se o arquivo Program.cs contém as linhas builder.Services.AddControllers(); e app.MapControllers();. Esta é a configuração padrão para uma API REST em C#.
2. Criando o Modelo de Dados e o Controlador (10 Minutos)
Vamos começar criando um modelo de dados. Na pasta raiz do projeto, crie uma pasta Models e adicione um arquivo TodoItem.cs a ela:
public class TodoItem{ public int Id { get; set; } public string Title { get; set; } = string.Empty; public bool IsComplete { get; set; } public DateTime CreatedAt { get; set; } = DateTime.UtcNow;}Agora vamos criar o controlador. Na pasta Controllers, adicione um arquivo TodoController.cs. Este é o coração da nossa API REST em C#:
[ApiController][Route("api/[controller]")]public class TodoController : ControllerBase{ private static List<TodoItem> _todos = new(); private static int _nextId = 1;
[HttpGet] public IActionResult GetAll() { return Ok(_todos); }
[HttpGet("{id}")] public IActionResult GetById(int id) { var todo = _todos.FirstOrDefault(t => t.Id == id); if (todo == null) return NotFound(); return Ok(todo); }
[HttpPost] public IActionResult Create(TodoItem item) { item.Id = _nextId++; _todos.Add(item); return CreatedAtAction(nameof(GetById), new { id = item.Id }, item); }
[HttpPut("{id}")] public IActionResult Update(int id, TodoItem item) { var existing = _todos.FirstOrDefault(t => t.Id == id); if (existing == null) return NotFound(); existing.Title = item.Title; existing.IsComplete = item.IsComplete; return NoContent(); }
[HttpDelete("{id}")] public IActionResult Delete(int id) { var todo = _todos.FirstOrDefault(t => t.Id == id); if (todo == null) return NotFound(); _todos.Remove(todo); return NoContent(); }}Preste atenção nos atributos:
[ApiController]— permite a validação automática do modelo[Route("api/[controller]")]— define a rota base/api/todo[HttpGet], [HttpPost], [HttpPut], [HttpDelete]— vinculam