Introdução: API REST em C# — é simples
\nAPI REST (Representational State Transfer) é um estilo arquitetural para criação de serviços web, que hoje é usado em praticamente todos os aplicativos modernos. Se você quer aprender rapidamente a escrever backend em C#, o ASP.NET Core é a melhor escolha para começar. Neste artigo, em 30 minutos criaremos uma API REST completa para gerenciar uma lista de tarefas (Todo List). Você aprenderá como configurar o projeto, escrever controladores, conectar o banco de dados e testar a API através do Swagger.
\nPronto? Vamos lá!
\n\nPasso 1: Criação do projeto e configuração do ambiente
\nPrimeiro, precisamos do .NET SDK instalado (versão 6.0 ou superior). Você pode baixá-lo do site oficial da Microsoft. Após a instalação, abra o terminal ou prompt de comando e crie um novo projeto:
\ndotnet new webapi -n TodoApi\ncd TodoApi\nEste comando criará um template de web API com Swagger pré-instalado. Abra o projeto no Visual Studio Code ou qualquer outra IDE. A estrutura do projeto já inclui as pastas Controllers, Models e o arquivo Program.cs.
Agora, adicionaremos suporte ao Entity Framework Core para trabalhar com banco de dados. Instale os pacotes necessários:
\ndotnet add package Microsoft.EntityFrameworkCore.InMemory\ndotnet add package Microsoft.EntityFrameworkCore.Design\nUsaremos um banco InMemory para simplificar — os dados serão armazenados na memória RAM. Para produção, você pode substituí-lo por SQL Server ou PostgreSQL.
\n\nPasso 2: Criação do modelo de dados e contexto do BD
\nCriaremos o modelo TodoItem. Na pasta Models, crie o arquivo TodoItem.cs:
namespace TodoApi.Models;\n\npublic class TodoItem\n{\n public long Id { get; set; }\n public string? Title { get; set; }\n public bool IsComplete { get; set; }\n}\nAgora, criaremos o contexto do banco de dados. Na pasta Data (se não existir, crie-a), adicione o arquivo TodoContext.cs:
using Microsoft.EntityFrameworkCore;\nusing TodoApi.Models;\n\nnamespace TodoApi.Data;\n\npublic class TodoContext : DbContext\n{\n public TodoContext(DbContextOptions<TodoContext> options) : base(options) { }\n public DbSet<TodoItem> TodoItems { get; set; }\n}\nRegistraremos o contexto no Program.cs:
using Microsoft.EntityFrameworkCore;\nusing TodoApi.Data;\n\nvar builder = WebApplication.CreateBuilder(args);\n\nbuilder.Services.AddDbContext<TodoContext>(opt =>\n opt.UseInMemoryDatabase("TodoList"));\n\nbuilder.Services.AddControllers();\nbuilder.Services.AddEndpointsApiExplorer();\nbuilder.Services.AddSwaggerGen();\n\nvar app = builder.Build();\n\nif (app.Environment.IsDevelopment())\n{\n app.UseSwagger();\n app.UseSwaggerUI();\n}\n\napp.UseHttpsRedirection();\napp.UseAuthorization();\napp.MapControllers();\napp.Run();\n\nPasso 3: Escrita do controlador com operações CRUD
\nCriaremos o controlador para trabalhar com as tarefas. Na pasta Controllers, adicione o arquivo TodoItemsController.cs:
using Microsoft.AspNetCore.Mvc;\nusing Microsoft.EntityFrameworkCore;\nusing TodoApi.Data;\nusing TodoApi.Models;\n\nnamespace TodoApi.Controllers;\n\n[Route("api/[controller]")]\n[ApiController]\npublic class TodoItemsController : ControllerBase\n{\n private readonly TodoContext _context;\n\n public TodoItemsController(TodoContext context)\n {\n _context = context;\n }\n\n // GET: api/TodoItems\n [HttpGet]\n public async Task<ActionResult<IEnumerable<TodoItem>>> GetTodoItems()\n {\n return await _context.TodoItems.ToListAsync();\n }\n\n // GET: api/TodoItems/5\n [HttpGet("{id}")]\n public async Task<ActionResult<TodoItem>> GetTodoItem(long id)\n {\n var todoItem = await