ADR-009 — API Streaming Strategy (SSE vs WebSocket vs Polling)
Statut
Accepté
Contexte
Le projet Seaway inclut une interface utilisateur React orientée dashboard permettant de visualiser l'état du système et les événements liés aux séjours.
Une question s'est posée concernant la mise à jour de l'interface en temps réel :
comment informer l'interface utilisateur des nouveaux événements produits par le backend ?
Plusieurs approches étaient possibles :
- polling HTTP classique
- Server-Sent Events (SSE)
- WebSockets
Le choix devait prendre en compte :
- la complexité d'implémentation
- les besoins réels du produit
- la fiabilité
- la maintenabilité
Décision
Le projet adopte une stratégie pragmatique :
- API REST pour les opérations standard
- polling côté frontend pour la consultation régulière
- SSE expérimenté côté backend mais non utilisé en production
Les mises à jour temps réel complètes ont été considérées comme non essentielles dans la première version du système.
Polling HTTP
Le polling consiste à interroger périodiquement l'API REST afin de récupérer l'état actuel du système.
Exemple :
GET /api/sejours
Le frontend rafraîchit les données à intervalle régulier.
Avantages
- simplicité d'implémentation
- robustesse
- aucune connexion longue durée
- facile à maintenir
Inconvénients
- latence entre les mises à jour
- requêtes supplémentaires
Dans le contexte du projet, ces inconvénients sont considérés comme acceptables.
Server-Sent Events (SSE)
SSE permet au serveur d'envoyer des événements vers le client via une connexion HTTP persistante.
Un prototype SSE a été implémenté côté backend.
Exemple :
/api/events
Cependant l'intégration côté frontend a été temporairement abandonnée pour plusieurs raisons :
- complexité supplémentaire
- gestion du reconnect
- faible valeur immédiate pour l'interface
WebSockets
WebSockets permettent une communication bidirectionnelle entre client et serveur.
Cette approche a été considérée mais écartée pour la première version du système.
Elle aurait introduit :
- complexité réseau
- gestion de connexions persistantes
- infrastructure supplémentaire
Conséquences
Avantages
- architecture simple
- API REST classique facile à maintenir
- complexité technique limitée
Inconvénients
- absence de temps réel strict
- latence dépendante de l'intervalle de polling
Alternatives considérées
SSE complet
Cette solution reste envisageable dans une évolution future du projet.
WebSockets
Approche puissante mais disproportionnée pour les besoins actuels du système.
Justification
Dans une première phase du projet, la simplicité et la robustesse ont été privilégiées.
Le polling HTTP répond aux besoins fonctionnels tout en conservant une architecture facile à comprendre et à maintenir.
L'architecture reste ouverte à l'introduction d'un mécanisme de streaming plus avancé si les besoins évoluent.