Guia Definitivo: JWT no ASP.NET Core com Segurança Máxima
Crie Uma API Completa de E-commerce com ASP.NET Core
Por que este projeto🤝 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!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:
- ASP.NET Core
🚀 Criando sua Primeira API: De 0 a 'Hello World' em 10 Minutos!Descubra como criar e testar uma API RESTful com ASP.NET Core. Siga este tutorial detalhado para configurar, implementar endpoints e validar sua aplicação. para rotas e controllers
🛠️ 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.
- Entity Framework Core
🗂️ 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. para
🔄 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! acesso a dados
- JWT
🔑 Autenticação JWT: Proteja sua API com Tokens!Descubra como implementar autenticação JWT no ASP.NET Core com exemplos práticos, boas práticas de segurança e dicas para proteger suas APIs de forma eficiente. para autenticação
🔑 Autenticação JWT: Proteja sua API com Tokens!Descubra como implementar autenticação JWT no ASP.NET Core com exemplos práticos, boas práticas de segurança e dicas para proteger suas APIs de forma eficiente.
- Swagger
📄 Swagger/OpenAPI: Documente sua API Automaticamente!Descubra como gerar documentação interativa e automatizada em APIs com o Swagger/OpenAPI. Aprenda a configurar no .NET e testar endpoints facilmente. para documentação automática
📄 Swagger/OpenAPI: Documente sua API Automaticamente!Descubra como gerar documentação interativa e automatizada em APIs com o Swagger/OpenAPI. Aprenda a configurar no .NET e testar endpoints facilmente.
Público-alvo: Se você está migrando de Java/Python ou quer atualizar📡 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
🤝 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.
- Arquitetura da API
- Configurando o Projeto
🤝 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.
- Modelagem de Dados
- Camada de Dados com EF Core
🗂️ 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.
- Controllers
🛠️ 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. e Endpoints
- DTOs
📦 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. e AutoMapper
- Validação com FluentValidation
- Autenticação JWT
📄 Swagger/OpenAPI: Documente sua API Automaticamente!Descubra como gerar documentação interativa e automatizada em APIs com o Swagger/OpenAPI. Aprenda a configurar no .NET e testar endpoints facilmente.
- Testando com Swagger
📄 Swagger/OpenAPI: Documente sua API Automaticamente!Descubra como gerar documentação interativa e automatizada em APIs com o Swagger/OpenAPI. Aprenda a configurar no .NET e testar endpoints facilmente.
- Deploy na Nuvem
- Desafio Prático
- Considerações Finais
Visão Geral do Projeto🔗
Nesta aplicação, o intuito é fornecer serviços de e📊 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:
- Cadastro e consulta
🎲 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. de produtos.
- Registro de pedidos e
📊 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. atualização de status de compra.
- Gestão de usuários (desde shoppers até administradores).
O stack escolhido é:
- ASP.NET Core
🚀 Criando sua Primeira API: De 0 a 'Hello World' em 10 Minutos!Descubra como criar e testar uma API RESTful com ASP.NET Core. Siga este tutorial detalhado para configurar, implementar endpoints e validar sua aplicação. para
🔄 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! criação da API (por sua flexibilidade e performance
🔄 StringBuilder: Quando Concatenar Strings Vira um Pesadelo!Descubra como o StringBuilder otimiza a concatenação em C#, evitando desperdício de memória e melhorando a performance das aplicações. Veja exemplos práticos!).
- SQL
📝 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 como banco relacional para armazenar dados críticos (produtos
🎲 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., pedidos, etc.).
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!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!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!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!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!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!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!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!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.
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...
}
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🔗
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🔗
- Use o Swagger para testar todos os endpoints
📡 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. sem precisar de clientes externos
Deploy na Nuvem🔗
1. Criar App Service📦 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!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
- 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!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!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!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:
- Adicionar
📦 List<T>: Dinamismo além dos Arrays!Descubra como utilizar List<T> em C# de forma eficiente. Aprenda a criar, manipular e otimizar listas para diferentes cenários com exemplos práticos. pagamento com Stripe/PagSeguro
- Implementar cache
📡 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 Redis
- Criar
📡 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. microsserviço de catálogo
- Adicionar monitoramento
🚀 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. com Application Insights
Dica Profissional: Sempre use async/await
em operações de I/O e teste seus endpoints⚡ 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.
📡 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!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!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!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🔗
- .NET Documentation: learn.microsoft.com/pt-br/dotnet/
- Awesome .NET: github.com/quozd/awesome-dotnet
- C# Language Specification: learn.microsoft.com/pt-br/dotnet/csharp/language-reference/language-specification/
- GitHub: Microsoft/.NET: github.com/dotnet
- Microsoft Learn: C# e .NET: learn.microsoft.com/pt-br/dotnet/csharp/