Référence API Backend¶
Ce dossier contient la documentation technique générée pour l'API backend.
Contenu¶
TypeDoc¶
Documentation générée automatiquement depuis le code TypeScript :
- Modules NestJS
- Services
- Controllers
- Entities
- DTOs
OpenAPI¶
Spécification OpenAPI de l'API REST :
- Endpoints
- Schemas
- Authentication
Génération¶
La documentation est générée automatiquement via :
# TypeDoc
npx typedoc --out docs/reference/backend-api/typedoc src/
# OpenAPI (via NestJS Swagger)
npm run build
# Swagger UI disponible sur /api/docs en dev
Structure cible¶
reference/backend-api/
├── index.md (ce fichier)
├── typedoc/
│ ├── modules.md
│ ├── classes.md
│ └── interfaces.md
└── openapi/
└── openapi.yaml
Authentification¶
OIDC/Keycloak (PD-26)¶
L'API utilise OAuth2/OIDC avec Keycloak pour l'authentification :
- JWT RS256 : Tokens signés asymétriquement via JWKS
- Fail-closed : HTTP 503 si JWKS indisponible (INV-08)
- Autorisation HYBRID : Rôles (
authz.roles) + Scopes (authz.scopes)
Headers requis¶
Décorateurs d'autorisation¶
@Roles('admin', 'user') // Requiert un des rôles
@Scopes('documents:read') // Requiert le scope
@AuthorizationRule(AuthRule.AND) // Requiert rôles ET scopes
@Public() // Route publique (pas d'auth)
Endpoints principaux¶
| Méthode | Route | Description | Auth |
|---|---|---|---|
| GET | /health | Health check (inclut OIDC/JWKS) | Public |
| POST | /api/v1/auth/register | Inscription utilisateur | Public |
| POST | /api/v1/auth/login | Connexion SRP-6a | Public |
| POST | /api/v1/auth/refresh | Refresh token | Public |
| GET | /api/v1/documents | Liste documents | JWT |
| POST | /api/v1/documents | Créer document | JWT |
| GET | /api/v1/documents/:id | Détail document | JWT |
| DELETE | /api/v1/documents/:id | Supprimer document | JWT |
| POST | /api/v1/documents/:id/certify | Certifier document | JWT |
Codes d'erreur authentification¶
| Code | HTTP | Description |
|---|---|---|
jwks_unavailable | 503 | JWKS Keycloak indisponible |
invalid_token | 401 | Token JWT invalide |
token_expired | 401 | Token expiré |
invalid_issuer | 401 | Issuer non autorisé |
invalid_audience | 401 | Audience non autorisée |
access_denied | 403 | Permissions insuffisantes |