Introdução

Neste tutorial, vamos explorar passo a passo como criar uma API RESTful robusta utilizando C# e o framework ASP.NET Core, aplicando o Entity Framework para a interação com o banco de dados. Focaremos nas melhores práticas de segurança e na implementação de testes automatizados, garantindo que sua aplicação esteja não apenas funcional, mas também segura e testável. Este guia é ideal para desenvolvedores que desejam profundidade nos conhecimentos sobre C# e ASP.NET Core, com um enfoque em princípios de desenvolvimento de software limpo e eficaz.

Etapas

  1. Configuração do Ambiente de Desenvolvimento

    Certifique-se de ter o SDK do .NET instalado em sua máquina. Você pode baixar a versão mais recente do SDK no site oficial da Microsoft. Para verificar se está instalado corretamente, use os comandos `dotnet –version` no console.

    commands
    # Verificar versão instalada
    dotnet --version

  2. Criação do Projeto ASP.NET Core

    Utilize o comando CLI do .NET para criar um novo projeto ASP.NET Core Web API. Insira o nome do seu projeto ao executar o comando. Esse comando cria a estrutura básica para uma nova aplicação Web API.

    commands
    dotnet new webapi -n MeuProjetoAPI

  3. Instalação do Entity Framework Core

    Navegue até o diretório do projeto e instale o Entity Framework Core usando o comando do NuGet. Isso permitirá que você acesse e manipule dados em um banco de dados relacional através de código C#.

    commands
    cd MeuProjetoAPI
    dotnet add package Microsoft.EntityFrameworkCore.SqlServer
    dotnet add package Microsoft.EntityFrameworkCore.Tools

  4. Configuração do Banco de Dados

    Crie uma nova classe chamada `AppDbContext` que herda de `DbContext`. Neste contexto, defina um `DbSet` para cada entidade que você deseja armazenar no banco de dados.

    AppDbContext.cs
    using Microsoft.EntityFrameworkCore;
    
    public class AppDbContext : DbContext
    {
        public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
    
        public DbSet<Produto> Produtos { get; set; }
    }
    

  5. Criação da Entidade `Produto`

    Implemente a classe modelo `Produto` para representar os dados que serão armazenados no banco de dados. Adicione propriedades como `Id`, `Nome`, e `Preco` e decore com atributos para configuração do Entity Framework.

    Produto.cs
    using System.ComponentModel.DataAnnotations;
    
    public class Produto
    {
        [Key]
        public int Id { get; set; }
        [Required]
        public string Nome { get; set; }
        [Required]
        public decimal Preco { get; set; }
    }
    

  6. Configuração do Startup.cs

    No arquivo `Startup.cs`, configure o serviço do Entity Framework e conecte-se ao banco de dados. Utilize a conexão com SQL Server no método `ConfigureServices`.

    Startup.cs
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<AppDbContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
        services.AddControllers();
    }
    

  7. Implementação do Controlador `ProdutoController`

    Crie um novo controlador chamado `ProdutoController`. Esse controlador deve expor endpoints para as operações CRUD. Injetar o contexto do banco de dados e criar métodos para GET, POST, PUT e DELETE.

    ProdutoController.cs
    using Microsoft.AspNetCore.Mvc;
    using System.Collections.Generic;
    
    [Route("api/[controller]")]
    [ApiController]
    public class ProdutoController : ControllerBase
    {
        private readonly AppDbContext _context;
    
        public ProdutoController(AppDbContext context)
        {
            _context = context;
        }
    
        [HttpGet]
        public ActionResult<List<Produto>> GetAll()
        {
            return _context.Produtos.ToList();
        }
    
        [HttpPost]
        public IActionResult Create([FromBody] Produto produto)
        {
            _context.Produtos.Add(produto);
            _context.SaveChanges();
            return CreatedAtAction(nameof(GetAll), new { id = produto.Id }, produto);
        }
    }
    

  8. Implementação de Testes Unitários

    Adicione um novo projeto de testes ao seu solução usando a CLI do .NET. Escreva testes unitários para o `ProdutoService` usando xUnit e Moq, validando o funcionamento dos métodos CRUD.

    commands
    dotnet new xunit -n MeuProjetoAPI.Tests
    dotnet add MeuProjetoAPI.Tests reference MeuProjetoAPI
    dotnet add MeuProjetoAPI.Tests package Moq

  9. Executando a Aplicação e Testes

    Utilize o CLI do .NET para executar a aplicação e os testes unitários. Para testar os endpoints, pode-se usar ferramentas como Postman ou cURL.

    commands
    # Compilar e executar a aplicação
    dotnet run
    # Executar os testes unitários
    dotnet test

    curl_examples
    # Listar todos os produtos
    curl -X GET http://localhost:5000/api/produtos
    # Criar um novo produto
    curl -X POST -H 'Content-Type: application/json' -d '{"nome":"Produto Teste", "preco":9.99}' http://localhost:5000/api/produtos

Conclusão

Neste tutorial, você aprendeu a desenvolver uma API RESTful utilizando C# com ASP.NET Core e Entity Framework. Abordamos desde a configuração do ambiente até a implementação de testes automatizados, sempre com uma atenção especial à segurança. Agora, você está preparado para criar aplicações mais complexas e robustas, aplicando as melhores práticas aprendidas ao longo deste guia.

Hashtags

#CSharp #ASPNetCore #EntityFramework #APIs #TestesAutomatizados #DesenvolvimentoDeSoftware