← Volver a Middleware

MiddlewareExtensions

Extensiones para registrar y configurar todos los middlewares del sistema RestMaster

📊 Resumen del Middleware

30
Líneas de Código
5
Extensiones
Fluent
API Design
Builder
Pattern

El MiddlewareExtensions es un componente de configuración del sistema RestMaster que proporciona extensiones para registrar y configurar todos los middlewares de forma fluida y organizada. Este archivo centraliza la configuración de middlewares y proporciona una API limpia para su registro en el pipeline de la aplicación.

🎯 Funcionalidades Principales

  • Registro fluido: API fluida para registrar middlewares
  • Centralización: Punto único de configuración de middlewares
  • Fluent API: Métodos de extensión encadenables
  • Configuración simplificada: Reduce complejidad en Program.cs
  • Mantenibilidad: Fácil agregar o remover middlewares
  • Consistencia: Patrón uniforme para todos los middlewares
  • Documentación: Métodos auto-documentados
  • Flexibilidad: Permite configuración condicional

🔧 Dependencias y Servicios

Dependencias Requeridas:

  • Microsoft.AspNetCore.Builder: IApplicationBuilder
  • Back.API.Middleware: Todos los middlewares del sistema
  • System: Funcionalidades básicas de .NET

📊 Middlewares Soportados

  • GrafanaLoggingMiddleware: Logging estructurado para Grafana
  • ErrorHandlingMiddleware: Manejo centralizado de errores
  • JwtLoggingMiddleware: Logging de autenticación JWT
  • JwtAutoRefreshMiddleware: Renovación automática de tokens
  • SpanishCultureMiddleware: Configuración de cultura española

📋 Métodos de Extensión

🔍 UseGrafanaLogging()

Registra el middleware de logging para Grafana
app.UseGrafanaLogging();
  • Propósito: Logging estructurado optimizado para Grafana Loki
  • Orden recomendado: Temprano en el pipeline
  • Dependencias: ILogger<GrafanaLoggingMiddleware>

⚠️ UseErrorHandling()

Registra el middleware de manejo de errores
app.UseErrorHandling();
  • Propósito: Manejo centralizado de errores con IA y Telegram
  • Orden recomendado: Último en el pipeline
  • Dependencias: ITelegramService, ILogger, IConfiguration

🔐 UseJwtLogging()

Registra el middleware de logging JWT
app.UseJwtLogging();
  • Propósito: Logging de autenticación y corrección de headers
  • Orden recomendado: Después de GrafanaLogging
  • Dependencias: ILogger<JwtLoggingMiddleware>

🔄 UseJwtAutoRefresh()

Registra el middleware de renovación automática JWT
app.UseJwtAutoRefresh();
  • Propósito: Renovación automática de tokens próximos a expirar
  • Orden recomendado: Después de JwtLogging
  • Dependencias: ILogger, HttpClient, IConfiguration

🇪🇸 UseSpanishCulture()

Registra el middleware de cultura española
app.UseSpanishCulture();
  • Propósito: Configuración automática de cultura española
  • Orden recomendado: Primero en el pipeline
  • Dependencias: Ninguna

📋 Orden de Ejecución Recomendado

🎯 Pipeline Optimizado

  1. UseSpanishCulture(): Configuración de cultura (primero)
  2. UseGrafanaLogging(): Logging de inicio de petición
  3. UseJwtLogging(): Logging de autenticación
  4. UseJwtAutoRefresh(): Renovación de tokens
  5. DayOpenValidationMiddleware: Validación de día abierto
  6. UseErrorHandling(): Manejo de errores (último)

📊 Ejemplo de Configuración Completa

// En Program.cs app.UseSpanishCulture(); app.UseGrafanaLogging(); app.UseJwtLogging(); app.UseJwtAutoRefresh(); app.UseDayOpenValidation(); // Si está disponible app.UseErrorHandling();

⚠️ Consideraciones de Orden

  • Cultura primero: Configuración cultural debe ser lo primero
  • Logging temprano: GrafanaLogging debe ir antes de otros middlewares
  • JWT secuencial: JwtLogging antes que JwtAutoRefresh
  • Validaciones intermedias: DayOpenValidation después de autenticación
  • Errores último: ErrorHandling debe ser el último middleware

🔍 Características Técnicas

🎯 Características de las Extensiones

  • Extension Methods: Métodos de extensión para IApplicationBuilder
  • Fluent API: API encadenable para configuración
  • Builder Pattern: Patrón builder para configuración
  • Static Class: Clase estática para métodos de extensión
  • Namespace Organization: Organización en namespace específico
  • Dependency Injection: Integración con DI container
  • Error Handling: Manejo de errores en configuración
  • Performance Optimized: Configuración eficiente

⚠️ Consideraciones de Configuración

  • El orden de registro afecta el orden de ejecución
  • Algunos middlewares dependen de otros
  • La configuración debe ser consistente en todos los entornos
  • Los middlewares deben ser registrados antes de los endpoints
  • La configuración condicional debe ser manejada cuidadosamente
  • Los errores de configuración pueden afectar toda la aplicación

📝 Patrones de Diseño Utilizados

  • Extension Method Pattern: Extensión de funcionalidad existente
  • Builder Pattern: Construcción fluida de configuración
  • Fluent Interface: API encadenable y legible
  • Static Factory: Creación de instancias de middleware
  • Configuration Pattern: Centralización de configuración
  • Dependency Injection: Inyección de dependencias

📈 Ventajas de la Implementación

Fluent
API Design
Centralized
Configuration
Maintainable
Code
Consistent
Pattern

Beneficios de la Implementación:

🔗 Integración con Program.cs

🎯 Configuración Típica en Program.cs

var builder = WebApplication.CreateBuilder(args); // Configuración de servicios builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); // Configuración de middlewares builder.Services.AddHttpClient(); builder.Services.AddScoped<ITelegramService, TelegramService>(); builder.Services.AddScoped<DbWorkingContextHelper>(); var app = builder.Build(); // Configuración del pipeline de middlewares if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.UseSpanishCulture(); app.UseGrafanaLogging(); app.UseJwtLogging(); app.UseJwtAutoRefresh(); app.UseDayOpenValidation(); app.UseAuthorization(); app.UseErrorHandling(); app.MapControllers(); app.Run();

📊 Configuración Condicional

// Configuración basada en entorno if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } // Configuración basada en configuración if (builder.Configuration.GetValue<bool>("EnableGrafanaLogging")) { app.UseGrafanaLogging(); } // Configuración basada en features if (builder.Configuration.GetValue<bool>("EnableJwtAutoRefresh")) { app.UseJwtAutoRefresh(); }

📋 Casos de Uso

🎯 Escenarios de Configuración

  • Configuración básica: Todos los middlewares habilitados
  • Configuración de desarrollo: Middlewares adicionales para debugging
  • Configuración de producción: Solo middlewares esenciales
  • Configuración condicional: Middlewares basados en configuración
  • Configuración personalizada: Orden específico de middlewares
  • Configuración de testing: Middlewares mínimos para tests
  • Configuración de staging: Middlewares de monitoreo intensivo
  • Configuración de demo: Middlewares para demostraciones

🔍 Ejemplos de Configuración

  • Desarrollo: Todos los middlewares + Swagger
  • Producción: Middlewares esenciales sin Swagger
  • Testing: Solo middlewares básicos
  • Monitoreo: Enfoque en logging y errores
  • Seguridad: Enfoque en autenticación y validación
  • Performance: Middlewares mínimos para velocidad