Este proyecto fue realizado siguiendo el curso de Arquitectura de Aplicaciones Empresariales, donde se explica el uso de diferentes patrones y NuGets para la base de un proyecto API Rest en ASP.NET.
- Patrón Health Check
- Patrón Repository y Unit of Work
- Rate Limiting
Además, se implementaron:
- Versionado
- Docker
- Validaciones con Fluent Validator
- Pruebas Unitarias con MSTest
- JWT
- Redis
- Arquitectura Limpia
- RabbitMQ
- SendGrid
- Swagger y ReDoc
- Bogus
El proyecto utiliza varias tecnologías de código abierto:
- Visual Studio: Editor de código
- ASP.NET 7: Construcción de API REST y Biblioteca de clases
- Docker: Para crear la imagen de la aplicación
- SQL Server: Base de datos
Para ejecutar el proyecto, es necesario contar con:
- SDK .NET 7 y ASP.NET Core Runtime
- SQL Server
- Docker
Puede instalar Redis utilizando Docker ejecutando los siguientes comandos:
docker pull redis
docker run --name mi-redis -d -p 6379:6379 redis
Puede instalar RabbitMQ utilizando Docker ejecutando los siguientes comandos:
docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.13-management
Luego, agregue al archivo appsettings.json los valores para las variables de entorno:
{
"ConnectionStrings:NorthwindConnection": "Data Source=HOST;Initial Catalog=databaseName;Integrated Security=False;Trusted_Connection=True;TrustServerCertificate=True",
"ConnectionStrings:RedisConnection": "localhost:6379,user=default,password=123456,ssl=False,abortConnect=False",
"Config": {
"OriginCors": "http://localhost:60468",
"Secret": "a",
"Issuer": "a",
"Audience": "a"
},
"HealthChecksUI": {
"HealthChecks": [
{
"Name": "Health Checks API",
"Uri": "/health"
}
],
"EvaluationTimeInSeconds": 5
},
"RateLimiting": {
"PermitLimit": 4,
"Window": 30,
"QueueLimit": 0
},
"RabbitMqOptions": {
"HostName": "localhost",
"VirtualHost": "/",
"UserName": "guest",
"Password": "guest"
},
"Sendgrid": {
"ApiKey": "",
"FromEmail": "",
"FromUser": "",
"SandboxMode": "false",
"ToAddress": "",
"ToUser": ""
}
}
Asegúrese de reemplazar las variables HOST, databaseName y los valores para Redis, Sendgrid y JWT con la configuración adecuada.