O TemplateApi é um acelerador de desenvolvimento para APIs robustas e escaláveis. Construído com as tecnologias mais recentes do ecossistema Microsoft, este template foca em Clean Architecture, padrões de segurança modernos e alta testabilidade, permitindo que você saia do "zero" para uma API funcional em segundos.
🔗 Repositório: https://github.com/DavisLira/TemplateApi/
- Framework: .NET 10 (C#)
- ORM: Entity Framework Core (Code First)
- Autenticação: JWT (JSON Web Tokens) com Refresh Tokens
- Mapeamento: Mapster
- Validação: FluentValidation
- Documentação: Swagger/OpenAPI
- Testes: xUnit, FluentAssertions e Bogus
Este repositório foi configurado como um dotnet template. Para utilizá-lo localmente, siga os passos abaixo:
Abra o terminal na raiz do projeto TemplateApi e execute:
dotnet new install ./Navegue até a pasta onde deseja criar o novo projeto e execute:
dotnet new new-api -n NomeDaMinhaApiO comando substituirá automaticamente os namespaces e referências de arquivos para NomeDaMinhaApi.
O projeto segue uma separação de responsabilidades rigorosa para facilitar a manutenção e evolução:
| Camada | Responsabilidade | O que contém? |
|---|---|---|
| Domain | O "coração" da aplicação. Independente de tecnologia. | Entidades, Enums, Interfaces de Repositório e Regras de Negócio. |
| Application | Orquestração de fluxos e lógica de aplicação. | Use Cases, Mapeamentos (DTOs) e Injeção de Dependência da lógica. |
| Infrastructure | Implementações externas e acesso a dados. | DbContext, Migrations, Repositórios e Serviços de Terceiros (Criptografia, Email). |
| Api | Interface de entrada (Ponto de contato com o usuário). | Controllers, Middlewares, Filters e Configuração de Segurança (JWT). |
| Communication | Contratos de comunicação. | Requests e Responses (JSON) compartilhados com o cliente. |
| Exceptions | Centralização de erros. | Exceções customizadas e mensagens multi-idioma. |
Para adicionar uma nova entidade ao banco de dados, siga este fluxo:
Crie sua classe em TemplateApi.Domain/Entities herdando de EntitieBase:
public class Product : EntitieBase
{
public long ProductId { get; set; }
public string Name { get; set; } = string.Empty;
public decimal Price { get; set; }
}Crie a configuração em TemplateApi.Infrastructure/DataAccess/Configurations para definir regras de banco:
public class ProductConfiguration : IEntityTypeConfiguration<Product>
{
public void Configure(EntityTypeBuilder<Product> builder)
{
builder.HasKey(p => p.ProductId);
builder.Property(p => p.Name).IsRequired().HasMaxLength(100);
builder.Property(p => p.Price).HasPrecision(18, 2);
builder.Property(p => p.Active)
.IsRequired();
builder.Property(p => p.CreatedAt)
.IsRequired();
}
}Abra o TemplateApiDbContext.cs e adicione o DbSet:
public DbSet<Product> Products { get; set; }Com a entidade criada, gere a migration através do terminal. Certifique-se de estar na raiz da solução ou aponte os projetos corretamente:
Criar Migration:
dotnet ef migrations add NomeDaMigration --project src/Backend/TemplateApi.Infrastructure --startup-project src/Backend/TemplateApi.ApiAtualizar Banco de Dados: A api já faz a atualização automáticamente sempre ao inicializar
dotnet ef database update --project src/Backend/TemplateApi.Infrastructure --startup-project src/Backend/TemplateApi.ApiA estrutura de testes é dividida para garantir cobertura total:
- UseCases.Test: Testes unitários da lógica de negócio.
- Validator.Test: Validação de inputs (FluentValidation).
- WebApi.Test: Testes de integração (End-to-End) usando
WebApplicationFactory.
Para executar todos os testes:
dotnet testDica: Utilizamos o padrão Builder (em CommonTestUtilities) para criar objetos de teste de forma fluida e reutilizável.
Para manter a consistência, siga estes caminhos:
- Controllers:
src/Backend/TemplateApi.Api/Controllers/ - Lógica de Negócio (UseCases):
src/Backend/TemplateApi.Application/UseCases/ - Configuração de Injeção de Dependência:
DependencyInjectionExtension.csem cada camada. - Mensagens de Erro:
src/Shared/TemplateApi.Exceptions/ResourceMessagesException.resx - Entidades de Banco:
src/Backend/TemplateApi.Domain/Entities/
A API utiliza JWT com políticas de autorização.
- Use
[AuthenticatedUser]para rotas logadas. - Use
[AuthenticatedAsAdmin]para rotas restritas a administradores.
⭐ Dica de Sênior: Sempre que criar um novo serviço, lembre-se de registrá-lo na DependencyInjectionExtension da respectiva camada para que o container do .NET consiga resolvê-lo.
Bons códigos! 🚀