Crie Uma API Completa de E-commerce com ASP.NET Core

Por que este projeto🤝 GitHub Básico: Versionamento para Iniciantes!🤝 GitHub Básico: Versionamento para Iniciantes!Descubra como o GitHub facilita colaboração, versionamento e organização de código com este tutorial prático e essencial para desenvolvedores iniciantes.? APIs são o coração do e-commerce moderno! Neste artigo, você vai construir uma API completa para um sistema de vendas🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio., usando tecnologias do mundo real como:

Público-alvo: Se você está migrando de Java/Python ou quer atualizar📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. skills .NET Framework para .NET 8+, este guia prático é seu mapa para o sucesso!

📚 Conteúdo do Artigo🔗

Visão Geral do Projeto🔗

Nesta aplicação, o intuito é fornecer serviços de e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades.-commerce típicos:

O stack escolhido é:

Em um cenário real, essa API poderia ser consumida por aplicações web, mobile ou até por microservices🚀 Kubernetes: Orquestração de Microservices na Nuvem!🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade..

Arquitetura da API🔗

Estrutura Básica de Pastas:

EcommerceAPI/
├── Controllers/
├── Models/
├── Data/
├── DTOs/
├── Migrations/
└── Services/

Principais Componentes:

1. Controllers🛠️ Controllers: Rotas que Respondem como Mágica!🛠️ Controllers: Rotas que Respondem como Mágica!Aprenda a criar e configurar controllers no ASP.NET Core com dicas práticas, exemplos de rotas e integração de serviços, elevando a qualidade da sua API.: Recebem requests HTTP

2. Models🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!Descubra como o padrão MVVM separa a interface e a lógica de negócio, facilitando testes e manutenção, com exemplos e dicas práticas para seu projeto.: Entidades do banco de dados (Produto🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados., Pedido, Usuário)

3. DbContext🗂️ Entity Framework Core: ORM que Faz Mágica com seu Banco!🗂️ Entity Framework Core: ORM que Faz Mágica com seu Banco!Aprenda a dominar o EF Core e simplifique suas operações de banco de dados com LINQ, migrações e mapeamentos automáticos, sem precisar escrever SQL.: Conexão com SQL📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!Aprenda os comandos cruciais de SQL para manipular dados em bancos relacionais com exemplos práticos, dicas e boas práticas para livrarias. Server

4. DTOs📦 DTOs: Transforme Dados sem Bagunçar seu Modelo de Domínio!📦 DTOs: Transforme Dados sem Bagunçar seu Modelo de Domínio!Descubra como os DTOs protegem o domínio, otimizam a comunicação entre camadas e garantem a segurança e eficiência nas integrações de sua API.: Objetos de transferência de dados📦 DTOs: Transforme Dados sem Bagunçar seu Modelo de Domínio!📦 DTOs: Transforme Dados sem Bagunçar seu Modelo de Domínio!Descubra como os DTOs protegem o domínio, otimizam a comunicação entre camadas e garantem a segurança e eficiência nas integrações de sua API.

5. Services🚀 Kubernetes: Orquestração de Microservices na Nuvem!🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade.: Lógica de negócio

Configurando o Projeto🔗

dotnet new webapi -n EcommerceAPI
cd EcommerceAPI
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package AutoMapper.Extensions.Microsoft.DependencyInjection

Program.cs:

var builder = WebApplication.CreateBuilder(args);
// Configurações essenciais
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();

Modelagem de Dados🔗

Product.cs:

public class Product
{
    public int Id { get; set; }
    [Required]
    [StringLength(100)]
    public string Name { get; set; }
    [Column(TypeName = "decimal(18,2)")]
    public decimal Price { get; set; }
    public int Stock { get; set; }
}
// Modelos similares para Order, OrderItem, User

Diagrama de Relacionamento:

User ──◄ Order ──◄ OrderItem ►─ Product

Camada de Dados com EF Core🔗

ApplicationDbContext.cs:

public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext(DbContextOptions options) : base(options) { }
    public DbSet<Product> Products { get; set; }
    public DbSet<Order> Orders { get; set; }
    // Outros DbSets...
}

Criando Migration🔄 Migrations: Evolua seu Banco sem Perder Dados!🔄 Migrations: Evolua seu Banco sem Perder Dados!Aprenda como aplicar migrations com segurança usando Entity Framework Core para evoluir seu banco de dados sem perder dados.:

dotnet ef migrations add InitialCreate
dotnet ef database update

Controllers e Endpoints🔗

ProductsController.cs:

[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
    private readonly ApplicationDbContext _context;
    public ProductsController(ApplicationDbContext context)
    {
        _context = context;
    }
    [HttpGet]
    public async Task<IActionResult> GetAll()
    {
        var products = await _context.Products.ToListAsync();
        return Ok(products);
    }
}

DTOs e AutoMapper🔗

ProductDTO.cs:

public class ProductDTO
{
    public string Name { get; set; }
    public decimal Price { get; set; }
    public int Stock { get; set; }
}

MappingProfile.cs:

public class MappingProfile : Profile
{
    public MappingProfile()
    {
        CreateMap<Product, ProductDTO>();
        CreateMap<ProductDTO, Product>();
    }
}

Validação com FluentValidation🔗

ProductDTOValidator.cs:

public class ProductDTOValidator : AbstractValidator<ProductDTO>
{
    public ProductDTOValidator()
    {
        RuleFor(p => p.Name).NotEmpty().Length(2, 100);
        RuleFor(p => p.Price).GreaterThan(0);
        RuleFor(p => p.Stock).GreaterThanOrEqualTo(0);
    }
}

Autenticação JWT🔗

Configuração🚀 Scale Out com Redis: Atenda Milhões de Conexões!🚀 Scale Out com Redis: Atenda Milhões de Conexões!Integre o Redis com SignalR no .NET e distribua mensagens entre servidores, alcançando escalabilidade e alta performance em tempo real. no Program.cs:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidateAudience = true,
            ValidateLifetime = true,
            ValidIssuer = builder.Configuration["Jwt:Issuer"],
            ValidAudience = builder.Configuration["Jwt:Audience"],
            IssuerSigningKey = new SymmetricSecurityKey(
                Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]))
        };
    });

Testando com Swagger🔗

Deploy na Nuvem🔗

Passos para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! Azure:

1. Criar App Service📦 Azure App Service: Deploy de APIs com um Clique!📦 Azure App Service: Deploy de APIs com um Clique!Aprenda a implantar sua API .NET com facilidade usando Azure App Service. Descubra como configurar, escalar e monitorar sua aplicação com poucos cliques. no portal Azure

2. Configurar connection string📝 Strings em C#: Manipule Textos como um Mestre dos Caracteres!📝 Strings em C#: Manipule Textos como um Mestre dos Caracteres!Aprenda a dominar os segredos das strings em C# com técnicas de manipulação, concatenação, interpolação e boas práticas, impulsionando sua performance. do SQL Server

3. Publicar via GitHub Actions🛠️ GitHub Actions para OSS: CI/CD Profissional de Graça!🛠️ GitHub Actions para OSS: CI/CD Profissional de Graça!Descubra neste tutorial como automatizar testes, builds e deploys em projetos OSS com GitHub Actions, elevando a qualidade do seu software.:

  • name: Deploy to Azure
uses: azure/webapps-deploy@v2 with: app-name: 'ecommerce-api' publish-profile: ${{ secrets.AZURE_PUBLISH_PROFILE }}

Desafio Prático🔗

Implemente estas Funcionalidades:

1. Sistema de carrinho de compras

2. Calculadora de frete baseado na localização

3. Endpoint📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. para histórico de pedidos

4. Filtro de produtos🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio. por categoria

Dica de Ouro:

// Exemplo de método complexo
[HttpPost("checkout")]
public async Task<IActionResult> Checkout([FromBody] CheckoutDTO checkout)
{
    // Implemente lógica de pagamento aqui!
}

Considerações Finais🔗

Você acabou de construir o núcleo de um e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades.-commerce real! Próximos passos:

Dica Profissional: Sempre use async/await⚡ Async/Await: Programação Assíncrona sem Callbacks!⚡ Async/Await: Programação Assíncrona sem Callbacks!Aprenda a aplicar Async/Await em C# para criar aplicações responsivas, evitar travamentos e melhorar a escalabilidade com exemplos práticos e dicas essenciais. em operações de I/O e teste seus endpoints📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. com ferramentas como Postman!

// Boa prática
public async Task<IActionResult> GetById(int id)
{
    var product = await _context.Products.FindAsync(id);
    return product != null ? Ok(product) : NotFound();
}

Conclusão: Com essas etapas concluídas, você terá uma API de e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades.-commerce funcional, cumprindo requisitos básicos de CRUD📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!Aprenda os comandos cruciais de SQL para manipular dados em bancos relacionais com exemplos práticos, dicas e boas práticas para livrarias., segurança🛡️ Segurança em SignalR: Autenticação e Autorização!🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real. mínima e organização por camadas. Fique à vontade para expandir com mais campos, integrações externas e regras de negócio avançadas conforme evoluir o projeto!

Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.

Referências🔗

Compartilhar artigo

Artigos Relacionados