2.9 KiB
Contrat d'API — PdfEditor
Document de référence partagé entre l'agent backend (Go) et l'agent frontend (Angular). Toute évolution doit être répercutée des deux côtés.
Base URL : /api
Auth : JWT Bearer dans l'en-tête Authorization: Bearer <access_token>.
Format : JSON (sauf upload/download de fichier).
Conventions
- Codes d'erreur :
400(validation),401(non authentifié),403(interdit),404(introuvable),409(conflit, ex. email déjà pris),500. - Corps d'erreur :
{ "error": "message lisible" }. - Dates : ISO 8601 (RFC 3339).
- Les
access_tokensont de courte durée (15 min). Lesrefresh_tokenpermettent d'obtenir un nouveau couple de tokens.
Authentification
POST /api/auth/register
Req: { "email": "a@b.c", "password": "..." }
Res 201: { "user": { "id", "email", "created_at" }, "access_token", "refresh_token" }
POST /api/auth/login
Req: { "email", "password" }
Res 200: { "user": {...}, "access_token", "refresh_token" }
POST /api/auth/refresh
Req: { "refresh_token": "..." }
Res 200: { "access_token", "refresh_token" }
POST /api/auth/logout
Auth requise. Invalide le refresh token courant. Res 204.
GET /api/me
Auth requise. Res 200: { "id", "email", "created_at" }
Documents
Toutes ces routes nécessitent l'authentification. Un utilisateur ne voit que ses propres documents.
GET /api/documents
Res 200: { "documents": [ { "id", "name", "size", "created_at", "updated_at" } ] }
POST /api/documents
Upload d'un nouveau PDF. multipart/form-data :
file: le binaire PDF (obligatoire)name: nom affiché (optionnel, défaut = nom du fichier) Res201:{ "id", "name", "size", "created_at", "updated_at" }
GET /api/documents/:id
Métadonnées. Res 200: { "id", "name", "size", "created_at", "updated_at" }
GET /api/documents/:id/file
Renvoie le binaire PDF. Content-Type: application/pdf.
PUT /api/documents/:id
Met à jour le PDF (après édition) et/ou le nom. multipart/form-data :
file: nouveau binaire PDF (optionnel)name: nouveau nom (optionnel) Res200: métadonnées à jour.
DELETE /api/documents/:id
Res 204.
Santé
GET /api/health
Res 200: { "status": "ok" } — utilisé par les healthchecks/monitoring.
Modèle de données (backend)
users:id(uuid),email(unique),password_hash,created_atrefresh_tokens:id,user_id,token_hash,expires_at,revokeddocuments:id(uuid),user_id(fk),name,file_path,size,created_at,updated_at
Notes d'intégration frontend
- Le frontend stocke
access_tokenen mémoire etrefresh_tokende façon persistante ; un intercepteur HTTP ajoute le Bearer et tente un/auth/refreshsur401. - En prod, nginx (image frontend) proxifie
/api/*vers le servicebackend:8080. En dev (docker-compose.local.yml), même comportement via nginx, ou proxy Angular vershttp://localhost:8081.