https://github.com/luccati/web-api-template
An API template designed for consuming external HTTP services.
https://github.com/luccati/web-api-template
api-rest asp-net-core csharp http-client logging net-core webapi
Last synced: about 1 month ago
JSON representation
An API template designed for consuming external HTTP services.
- Host: GitHub
- URL: https://github.com/luccati/web-api-template
- Owner: LuccaTi
- Created: 2026-05-05T12:16:30.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2026-05-11T18:06:01.000Z (about 2 months ago)
- Last Synced: 2026-05-11T20:11:04.686Z (about 2 months ago)
- Topics: api-rest, asp-net-core, csharp, http-client, logging, net-core, webapi
- Language: C#
- Homepage:
- Size: 30.3 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Web API Template — .NET 8
## Visão geral
Este repositório contém um template de API REST construída com ASP.NET Core (.NET 8). O projeto já vem estruturado com injeção de dependência, logging com Serilog, configuração via `appsettings.json` e Swagger opcional para documentação e testes.
O propósito é criar um "esqueleto"de Web APIs que sirva como um padrão de implementação, configuração e logging.
Endpoint de exemplo disponível:
- `GET /api/v1/test` → retorna uma lista de usuários da API de teste `jsonplaceholder.typicode.com`.
- `GET /api/v1/test/{id}` → retorna um usuário específico da lista de teste.
## Tecnologias e bibliotecas essenciais
- .NET 8 (ASP.NET Core)
- HttpClient: Biblioteca que faz as requisições e os tratamentos Http.
- Swashbuckle.AspNetCore (Swagger/OpenAPI)
- Mapster: Biblioteca usada para mapear os objetos trafegados entre as camadas.
- FluentValidation: Biblioteca para construção de regras de validação fortemente tipadas (validando os DTOs).
- Microsoft.Extensions.Configuration: Responsável por fazer leitura e escrita de arquivos de configuração.
- Serilog: Responsável por fazer a escrita em arquivos de Log.
- xUnit & Moq: Utilizados no projeto de testes automatizados para garantir a qualidade de componentes (ex: testes de serviços).
## Estrutura do projeto
O projeto divide suas responsabilidades da seguinte forma:
- `src/WebAPITemplate.Api`:
- **Responsabilidade**: Camada de Apresentação e ponto de entrada (`Program.cs`, `.exe`). Centraliza a injeção de dependências, registra middlewares (ex: `ExceptionHandlerMiddleware` preparado para falhas de validação fluente, customização de log levels e cancelamento HTTP 499) e expõe os endpoints via Controllers com suporte contínuo a `CancellationToken`. Usa os projetos Application e Infrastructure como referência.
- `src/WebAPITemplate.Application`:
- **Responsabilidade**: Casos de uso da aplicação. Contém abstrações de serviços, clientes externos, Mappers (`Mapster`), regras e extensões de validação (`FluentValidation`) e os DTOs de transporte que fluem de e para a API. Usa o projeto Domain como referência.
- `src/WebAPITemplate.Domain`:
- **Responsabilidade**: Entidades de núcleo e regras de negócio absolutas, além das exceções de uso geral (`NotFoundException`, `ConflictException`, etc).
- `src/WebAPITemplate.Infrastructure`:
- **Responsabilidade**: Implementação dos contratos definidos em Application/Domain (Ex: banco de dados, Clients, etc). Usa o projeto Application como referência.
## Endpoints
- `GET /api/v1/Test`
- Resposta 200: `Lista de users`
- Resposta 400: detalhes do erro em caso de falha, com log registrado.
- `GET /api/v1/Test/{id}`
- Resposta 200: `User específico`
- Resposta 400: detalhes do erro em caso de falha, com log registrado.
## Configuração
### appsettings.json
Configurações principais da aplicação (seção `AppConfig`):
- `UseSwaggerProduction` ("true" | "false"): habilita/desabilita o uso do swagger em produção (conveniência para testes).
- `ClientUrl` (string): URL base que será consumida pela API.
- `Timeout` (int): Tempo de timeout das conexões.
### appsettings.Production.json
Configuração específica para ambiente de produção:
- Define o Kestrel para escutar HTTPS na porta 443 (padrão web).
- Usado quando `ASPNETCORE_ENVIRONMENT=Production`.
### Perfis de execução (local)
Definidos em `src/WebAPITemplate.Api/Properties/launchSettings.json`:
- HTTPS: `https://localhost:5001`
- Ambiente padrão: `ASPNETCORE_ENVIRONMENT=Development`
## Uso da API
A API pode ser usada via console ao compilar o código e usar o .exe dentro do terminal, vale tanto para uso em Debug quanto Release.
## Testes Automatizados
O repositório inclui testes unitários, estruturados no projeto `tests/WebAPITemplate.Application.Tests`, validando regras de negócios e os Serviços de domínio (`UserServiceTests`) com bibliotecas como `xUnit`.
- Para executar os testes via terminal: `dotnet test`