1.6 KiB
1.6 KiB
Middleware Design — Unit 03: Availability Module
Dit document beschrijft de technische implementatie van de Availability Middleware.
1. Middleware Registratie
De middleware wordt in de Program.cs van de API Shell (U04) geregistreerd:
app.UseExceptionHandler(); // Eerst de exception handler (U01)
app.UseAvailability(); // Daarna de availability check
// ... andere middleware (Auth, Routing, etc)
2. AvailabilityMiddleware Logica
- Bypass voor Status Endpoint: Het pad
/api/availability/statuswordt altijd doorgelaten zonder check. - Check Fase:
- De middleware roept
IAvailabilityService.IsAvailableAsync()aan. - Indien status ==
Available->_next(context).
- De middleware roept
- Bypass voor Admins/Owners:
- Indien status ==
MaintenanceofNotAvailable: - De middleware inspecteert het JWT token in de
Authorizationheader handmatig (omdat de globale Authentication middleware nog niet is uitgevoerd op dit punt). - Indien de claim
rolegelijk is aanOwnerofAdministrator->_next(context). - Anders -> Retourneer
503 Service UnavailablemetApiErrorResponse.
- Indien status ==
3. PersistentAvailabilityService
Implementatie van de interface uit Unit 01.
- Database Opslag: Maakt gebruik van de
ApplicationDbContext(Unit 02). - Circuit Breaker:
- Houdt in een statische variabele de
_lastErrorTimeen_cachedStatusbij. - Indien
DateTimeOffset.UtcNow - _lastErrorTime < 30 seconden-> Retourneer de_cachedStatus(default:Available) zonder de database te pollen.
- Houdt in een statische variabele de
- Logging: Elke blokkade wordt gelogd met het IP-adres van de client en het gevraagde pad.