Repository navigation
API
L'interface web s'appuie entièrement sur une API HTTP JSON. Cette page en donne les conventions ; le détail de chaque route et de chaque objet est dans le contrat OpenAPI.
- Servi par l'application sur
/api/openapi.json(session requise). - Versionné dans le dépôt : docs/openapi.json. Un test échoue si la copie ne correspond plus à l'API, elle est donc toujours à jour.
- Pour le parcourir, l'ouvrir dans un éditeur OpenAPI (Swagger Editor, Redocly, l'extension OpenAPI de VS Code…).
- Toutes les routes sont sous
/api, en JSON (camelCase). Les énumérations s'écrivent en texte ("Preparation","Conforme") ; un entier est refusé. Les dates sont en ISO 8601, renvoyées en UTC. Les identifiants sont des GUID. -
Authentification par cookie de session :
POST /api/auth/connexionavec{ login, motDePasse }. Toutes les routes l'exigent, sauf la connexion,/api/santeet/api/version. -
Protection CSRF : toute requête qui modifie (autre que
GET,HEAD,OPTIONS) doit porter l'en-têteX-Requested-With(valeur libre), sinon 403. - Réponse des écritures : une modification d'une MEP renvoie la MEP complète, recalculée pour l'utilisateur courant (états des étapes, anomalies du plan, droits).
-
Concurrence : chaque MEP porte une
versionet chaque étape unerevision. Le client renvoie celle qu'il a lue ; si la ressource a changé entre-temps, la réponse est 409 et il faut relire. Une écriture qui croise seulement une autre écriture sur la même MEP (sur une autre étape, par exemple) est rejouée automatiquement par le serveur : elle n'aboutit en 409 que si ce qu'elle exige (révision de l'étape, version de la MEP) a réellement changé. -
Temps réel :
GET /api/meps/{id}/flux?session={onglet}est un flux Server-Sent Events. Il envoieevent: majavecdata: {"version": n}à chaque modification (le client relit alors la MEP) etevent: presenceavec la liste des personnes qui ont la MEP ouverte, à l'ouverture puis à chaque changement :[{"utilisateurId": "…", "nom": "Bob Martin", "elements": ["etape:…"]}].session(facultatif, 64 caractères au plus) identifie l'onglet du navigateur. -
Présence : informative, elle ne verrouille rien et vit avec le flux (fermer l'onglet la retire).
PUT /api/meps/{id}/presenceavec{ session, elements }déclare les éléments sur lesquels travaille l'onglet dont le flux est ouvert (liste vide : aucun) : 204, 404 si aucun flux de ce compte n'est ouvert avec cette session, 400 si une clé est invalide (10 au plus, 100 caractères au plus, lettres, chiffres,:,-,_,.). Clés utilisées par le front :etape:{id},preparation:{section},retour:fiche,recette:{idFiche}.GET /api/meps/{id}/presencerenvoie la même liste que l'événement. -
Journal : toute écriture est inscrite dans le journal de la MEP (
GET /api/meps/{id}/journal).
| Code | Sens |
|---|---|
| 400 | Saisie invalide (champ manquant, JSON mal formé, valeur inconnue). |
| 401 | Pas de session. |
| 403 | Droit insuffisant, ou en-tête X-Requested-With absent. |
| 404 | Ressource introuvable. |
| 409 | Conflit de version : la ressource a changé depuis sa lecture. |
| 413 | Fichier ou requête trop volumineux. |
| 422 | Refus par une règle métier (par exemple démarrer une étape qui attend une autre étape). |
| 429 | Trop de tentatives de connexion. |
Les erreurs ont pour corps { "message": "…" }, une phrase en français destinée à l'utilisateur.
| Préfixe | Contenu |
|---|---|
/api/auth |
Connexion, déconnexion, utilisateur courant, changement de mot de passe ; options de la page de connexion et connexion unique (/api/auth/sso/… : départ vers le fournisseur, liaison depuis le profil). |
/api/utilisateurs |
Liste des comptes (pour relier une personne à un compte) et profils. Chaque compte porte comptePrincipalId (compte principal de la même personne, ou null), nomPersonne (nom affiché de la personne) et equipeIds. |
/api/equipes |
Liste des équipes et de leurs membres (membreIds), pour tout utilisateur connecté. |
/api/meps |
Liste (`?modele=true |
/api/catalogue/systemes |
Catalogue global des systèmes. |
/api/resolutions |
Résolutions types et leurs versions. |
/api/parametres, /api/criteres-go-no-go
|
Paramètres globaux. |
/api/pieces-jointes |
Téléchargement d'une pièce jointe. |
/api/admin |
Console d'administration : comptes (dont POST /api/admin/utilisateurs/{id}/relier { comptePrincipalId, desactiver } et POST …/{id}/delier pour les comptes d'une même personne), équipes (POST /api/admin/equipes, PUT et DELETE /api/admin/equipes/{id}, saisie { nom, description, membreIds }, membreIds absent : membres inchangés), journal d'administration, vérification des mises à jour, réglages de la connexion unique (/api/admin/sso) (administrateurs seulement). |
/api/application |
Version en cours, lien de signalement et, pour un administrateur, dernière version publiée. |
/api/demo |
Mode démonstration uniquement (DEMO=true ; sinon 404 comme une route inconnue) : GET /api/demo (sans session) donne les comptes de démonstration ; POST /api/demo/connexion { login } ouvre la session d'un compte de démonstration, avec les mêmes protections que /api/auth/connexion (en-tête anti-CSRF, limite par adresse, blocage progressif), 403 pour tout autre login ; POST /api/demo/reinitialiser (administrateurs) remet la base dans son état initial et ferme la session. |
/api/sante, /api/version
|
Sonde de santé et empreinte du front servi (pour proposer de recharger un onglet après un déploiement). |
GET /api/meps/{id}/tests-unitaires donne le suivi des tests unitaires d'une MEP : nombre de tests faits et non faits, nombre de simples vérifications, puis pour chaque test l'étape, son état, le résultat attendu, le résultat constaté et l'exécutant. Chaque étape de la MEP porte aussi fin (TestUnitaire ou Verification) et resultatConstate ; gestion-mep meps exporter reprend ce suivi (testsUnitaires).
Plan de retour arrière facultatif : PUT /api/meps/{id} accepte retourArriereActive (absent : inchangé ; modifiable seulement en préparation) et echeanceRepli à null (sans échéance). Une MEP (GET /api/meps/{id}) et chaque ligne de GET /api/meps portent retourArriereActive. Sans plan de retour arrière, POST /api/meps/{id}/retour-arriere répond 422. L'activation et la désactivation sont inscrites au journal de la MEP (types repli.active et repli.desactive).
L'API ne propose pas encore de jeton d'accès : un script doit se connecter et conserver le cookie de session.
Prise en main
Utiliser
Installer et exploiter
Contribuer
Référence