Aller au contenu
Documentation Plateforme READ Ouvrir la plateforme

Chapitre 10

API et module hors ligne

L'API REST sécurisée par jetons, ses durées et ses limites, et le fonctionnement du module hors ligne côté exploitation.

Concerne :Équipe technique

L'API REST#

La plateforme expose une API sous /api/v1. Elle sert d'abord au module hors ligne, et peut servir à d'autres outils de l'organisation. Elle passe par les mêmes services que le site, donc par les mêmes règles : rôle du compte, périmètre géographique, paramètre « saisie par les organisations », montants masqués selon le rôle.

RéponseSignification
401Jeton absent, expiré ou révoqué (compte désactivé, droits ou mot de passe changés, appareil déconnecté)
403Action non autorisée pour ce compte ; mot de passe temporaire à changer d'abord sur le site
404Donnée hors du périmètre du compte, ou inexistante
409Donnée modifiée entre-temps par quelqu'un d'autre
429Trop d'appels depuis la même adresse IP

Les erreurs sont au format ProblemDetails (JSON) ; les énumérations sont écrites en texte (par exemple "Realisee").

Points d'accès#

RouteMéthodesUsage
/api/v1/jetonsPOSTConnexion : jeton d'accès et jeton de renouvellement
/api/v1/jetons/renouvelerPOSTNouveau couple de jetons ; le jeton présenté ne sert plus
/api/v1/jetons/revoquerPOSTDéconnexion de l'appareil
/api/v1/moiGETProfil du compte connecté
/api/v1/referentielsGETListes de saisie
/api/v1/organisations, /api/v1/organisations/{id}GETOrganisations visibles
/api/v1/activitesGET, POSTListe filtrée et paginée ; planification
/api/v1/activites/a-rapporterGETActivités pour lesquelles le compte peut saisir un rapport
/api/v1/activites/{id}GET, PUTFiche, modification
/api/v1/activites/{id}/statutPUTAvancement
/api/v1/rapportsGET, POSTListe ; saisie (brouillon, soumission ou validation)
/api/v1/rapports/{id}GET, PUTFiche, correction
/api/v1/rapports/{id}/renvoiPOSTRenvoi d'un rapport à l'organisation (gestion)

La description complète (OpenAPI) est servie sur /api/v1/openapi.json, aux comptes connectés seulement (par le site ou par jeton).

Jetons#

  1. Le client obtient ses jetons par POST /api/v1/jetons avec l'identifiant et le mot de passe d'un compte :

    { "identifiant": "personne@example.org", "motDePasse": "…", "appareil": "Téléphone de terrain 3" }
  2. Il reçoit un jeton d'accès (jetonAcces, valable expireDansSecondes) à présenter dans l'en-tête Authorization: Bearer <jeton>, et un jeton de renouvellement (jetonRenouvellement, valable jusqu'à renouvellementExpireLe).
  3. Avant l'expiration du jeton d'accès, il échange le jeton de renouvellement contre un nouveau couple (/api/v1/jetons/renouveler).
RègleValeur par défautRéglage
Durée du jeton d'accès30 minutesApi__DureeJetonAccesMinutes
Durée du jeton de renouvellement, glissante14 joursApi__DureeRenouvellementJours
Durée maximale avant de redemander le mot de passe90 joursApi__DureeMaximaleJours
Rejeu toléré d'un jeton de renouvellement déjà utilisé2 minutesApi__DelaiRejeuSecondes
Appels par minute et par adresse IP300Api__AppelsParMinute
Connexions et renouvellements par minute et par adresse IP10Securite__ConnexionsParMinute

Sécurité des jetons :

  • la zone /api n'accepte que les jetons, jamais le cookie du site ;
  • le jeton de renouvellement est à usage unique et seule son empreinte est enregistrée en base ;
  • un jeton de renouvellement présenté une seconde fois au-delà du délai de rejeu est considéré comme volé : tous les jetons de l'appareil sont révoqués ;
  • le compte est revérifié à chaque appel : désactivation, changement de rôle ou de mot de passe coupent l'accès aussitôt ;
  • les connexions par l'API sont inscrites au journal d'audit (canal « api ») et comptent dans les statistiques.

Les jetons expirés ou révoqués depuis plus de 30 jours sont supprimés par la tâche quotidienne.

Remarque

Il n'existe pas d'écran listant les appareils connectés. Pour couper l'accès d'un téléphone perdu, l'administrateur désactive le compte (ou change son mot de passe) : tous ses jetons sont refusés à l'appel suivant.

Le module hors ligne#

Le module (/terrain/) est une application WebAssembly installable (PWA), servie par la plateforme elle-même. Il est réservé aux comptes qui saisissent : l'équipe projet, et les organisations quand l'administrateur a ouvert la saisie aux organisations.

Ce qui est stocké sur le téléphone#

  • l'application elle-même, en cache (service worker) : seules les adresses de /terrain/ passent par ce cache, l'API va toujours au réseau ;
  • dans le stockage du navigateur (IndexedDB) : le profil, les listes de saisie, les activités à rapporter (au plus 500 : sans rapport, non annulées, commençant dans les 30 jours ou terminées depuis 90 jours au plus), les brouillons de rapport et le jeton de renouvellement. Le jeton d'accès reste en mémoire seulement.

Les rapports validés sont retirés du téléphone 30 jours après leur validation. Se déconnecter de ce téléphone révoque les jetons sur la plateforme puis les efface de l'appareil.

Synchronisation#

L'envoi n'a lieu que module ouvert : au démarrage, au retour du réseau, toutes les 5 minutes tant que des rapports attendent, et sur Synchroniser maintenant. Un rapport envoyé deux fois (réponse perdue sur un réseau instable) n'est jamais dupliqué : la plateforme reconnaît son identifiant et renvoie le rapport existant.

Mise à jour du module#

Un déploiement de la plateforme publie aussi la nouvelle version du module. Sur chaque téléphone :

  1. à la connexion suivante avec du réseau, le service worker télécharge la nouvelle version ;
  2. le module affiche « Une nouvelle version du module est prête. » et le bouton Mettre à jour (les saisies en cours sont enregistrées d'abord) ;
  3. sans action de l'utilisateur, la nouvelle version s'active quand tous les onglets du module sont fermés.

Les fichiers du module sont servis avec Cache-Control: no-cache : le navigateur revérifie toujours la version disponible.

Important

Un déploiement qui change le format des données de l'API doit rester compatible avec l'ancienne version du module tant que des téléphones ne sont pas mis à jour : des rapports peuvent attendre plusieurs jours dans leur file.

Plateforme READ — Édition 1.0 — octobre 2026. Documentation générée à partir des sources du projet ; les captures montrent des données de démonstration entièrement fictives.