Criando um CRUD de TODO com Web API ASP.NET Core.

01/08/2023

Neste artigo, vamos criar um aplicativo CRUD (Create, Read, Update, Delete) de TODO (Lista de Tarefas) usando ASP.NET Core. ASP.NET Core é um framework da Microsoft para construir aplicativos da web e APIs.

Pré-requisitos

Antes de começarmos, certifique-se de que você tem o seguinte instalado em sua máquina:

  1. .NET Core SDK - Certifique-se de ter a versão mais recente instalada.
  2. Um IDE de sua preferência, como o Visual Studio ou Visual Studio Code.

Criando o projeto ASP.NET Core

Abra o terminal ou prompt de comando e execute os seguintes comandos:

dotnet new sln --output TODO

dotnet new webapi -n TODO.WebAPI --output TODO/src/TODO.WebAPI

cd TODO

dotnet sln add src/TODO.WebAPI

Isso criará um solução com o nome "TODO" e novo projeto Web API ASP.NET Core com o nome "TODO.WebAPI" em uma pasta "src" e adiciona na solução.

Instalando as dependências do Entity Framework

Agora, precisamos adicionar as dependências do Entity Framework ao nosso projeto. No terminal ainda na pasta TODO, execute os seguintes comandos:

dotnet add package Microsoft.EntityFrameworkCore.Sqlite

dotnet add package Microsoft.EntityFrameworkCore.Design

Esses pacotes permitirão que usemos o SQLite como banco de dados e nos forneçam as ferramentas de design do Entity Framework.

Criando o modelo TODO

Vamos criar o modelo TODO que será mapeado para a tabela no banco de dados. Abra o arquivo "Models/Todo.cs" e adicione o seguinte código:

1using System.ComponentModel.DataAnnotations;
2
3namespace TODO.WebAPI.Models
4{
5    public class Todo
6    {
7        public int Id { get; set; }
8        public string Title { get; set; }
9        public bool IsCompleted { get; set; }
10    }
11}

Configurando o DbContext

Em seguida, precisamos configurar o DbContext para que o Entity Framework possa criar e gerenciar o banco de dados para nós. Crie uma nova pasta chamada "Data" e adicione um arquivo chamado "TodoContext.cs" com o seguinte código:

1using Microsoft.EntityFrameworkCore;
2using TODO.WebAPI.Models;
3
4namespace TODO.WebAPI.Data
5{
6    public class TodoContext : DbContext
7    {
8        public TodoContext(DbContextOptions<TodoContext> options) : base(options)
9        {
10        }
11
12        public DbSet<Todo> Todos { get; set; }
13    }
14}

Configurando o serviço do DbContext

Agora, precisamos configurar o serviço do DbContext no arquivo "Startup.cs". Adicione o seguinte código no método ConfigureServices:

1using Microsoft.EntityFrameworkCore;
2using TODO.WebAPI.Data;
3
4// ...
5
6builder.Services.AddDbContext<TodoContext>(options =>
7  options.UseSqlite(builder.Configuration.GetConnectionString("DefaultConnection")));
8
9// ...

Criando os controladores CRUD

Vamos criar os controladores que irão gerenciar as operações CRUD para a entidade TODO. Crie uma nova pasta chamada "Controllers" e adicione um arquivo chamado "TodosController.cs" com o seguinte código:

1using System.Collections.Generic;
2  using System.Linq;
3  using Microsoft.AspNetCore.Mvc;
4  using Microsoft.EntityFrameworkCore;
5  using TODO.WebAPI.Data;
6  using TODO.WebAPI.Models;
7  
8  namespace TODO.WebAPI.Controllers
9  {
10      [Route("api/[controller]")]
11      [ApiController]
12      public class TodosController : ControllerBase
13      {
14          private readonly TodoContext _context;
15  
16          public TodosController(TodoContext context)
17          {
18              _context = context;
19          }
20  
21          [HttpGet]
22          public ActionResult<IEnumerable<Todo>> GetTodos()
23          {
24              return _context.Todos.ToList();
25          }
26  
27          [HttpGet("{id}")]
28          public ActionResult<Todo> GetTodoById(int id)
29          {
30              var todo = _context.Todos.Find(id);
31  
32              if (todo == null)
33              {
34                  return NotFound();
35              }
36  
37              return todo;
38          }
39  
40          [HttpPost]
41          public ActionResult<Todo> CreateTodo(Todo todo)
42          {
43              _context.Todos.Add(todo);
44              _context.SaveChanges();
45  
46              return CreatedAtAction(nameof(GetTodoById), new { id = todo.Id }, todo);
47          }
48  
49          [HttpPut("{id}")]
50          public IActionResult UpdateTodo(int id, Todo updatedTodo)
51          {
52              var todo = _context.Todos.Find(id);
53  
54              if (todo == null)
55              {
56                  return NotFound();
57              }
58  
59              todo.Title = updatedTodo.Title;
60              todo.IsCompleted = updatedTodo.IsCompleted;
61  
62              _context.SaveChanges();
63  
64              return NoContent();
65          }
66  
67          [HttpDelete("{id}")]
68          public IActionResult DeleteTodoById(int id)
69          {
70              var todo = _context.Todos.Find(id);
71  
72              if (todo == null)
73              {
74                  return NotFound();
75              }
76  
77              _context.Todos.Remove(todo);
78              _context.SaveChanges();
79  
80              return NoContent();
81          }
82      }
83  }

Executando a aplicação

Agora que a estrutura básica da aplicação está pronta, vamos executá-la. No terminal ainda na pasta TODO, e execute os seguintes comandos:

cd src/TODO.WebAPI

dotnet run

A aplicação será executada, será apresentada as informações do host.

Acessando a API

Você pode acessar a API usando ferramentas como o Postman ou o Swagger UI. Nas novas versões da Web API o Swagger já vem configurado. Para acessar o Swagger UI, basta abrir o navegador e acessar com a URL informada no prompt. Ex: http://localhost:5026/swagger/index.html.