|
| 1 | +# 59. Mise à disposition de données |
| 2 | + |
| 3 | +Date : 2025-02-11 |
| 4 | + |
| 5 | +## État |
| 6 | + |
| 7 | +En cours de rédaction |
| 8 | + |
| 9 | +## Contexte |
| 10 | + |
| 11 | +Plusieurs partenaires récupèrent des données Pix pour les intégrer à leur SI. |
| 12 | +Ces données sont obtenues par différents moyens : |
| 13 | + |
| 14 | +* Export depuis Metabase, ou généré par Data, déposé sur le cloud Pix |
| 15 | +* Appel de routes de l'API Pix qui exploite des données de la base live |
| 16 | +* Appel de routes de l'API Pix qui exploite des données de la base froide |
| 17 | + |
| 18 | +Pour répondre à cette problématique de mise à disposition des données, un tech days en 2023 a permis de mettre en œuvre |
| 19 | +une brique [API Data](https://github.com/1024pix/pix-api-data). |
| 20 | +Cette brique est basée sur l'envoi de requêtes stockées à une base de données froides. |
| 21 | + |
| 22 | +Cependant, une première utilisation, pour la page analyse qui utilise le taux de couverture dans Pix Orga, a mis en |
| 23 | +évidence plusieurs problèmes : |
| 24 | + |
| 25 | +* absence de documentation du contrat de l'API : point d'entrée générique, qui ne permet pas de documenter facilement |
| 26 | + les données mises à disposition. |
| 27 | +* gestion d'autorisation inadaptée : droit sur une requête et droit pour chaque valeur de paramètre de |
| 28 | + la requête |
| 29 | +* absence de logique métier |
| 30 | +* difficulté à tester, car le schéma et les requêtes ne sont pas connus |
| 31 | + |
| 32 | + |
| 33 | + |
| 34 | +En 2025, de nombreuses interconnexions ont été prévues avec divers partenaires ce qui fait émerger de nouveaux |
| 35 | +sujets : |
| 36 | + |
| 37 | +* facturation de ces interconnexions |
| 38 | +* offre d'un service standardisé (documenté, testable, industrialisé) |
| 39 | +* limitation de l'impact sur la production de Pix (performances) |
| 40 | + |
| 41 | +Ces nouveaux sujets motivent la mise au point d'une solution standardisée pour mettre à disposition ce type de données. |
| 42 | + |
| 43 | +## Solutions envisagées |
| 44 | + |
| 45 | +Dans toutes les pistes envisagées qui suivent, nous ne modifions en aucun cas le fonctionnement de la réplication avec le Datawarehouse. |
| 46 | + |
| 47 | +### Solution 1 : Conserver l'architecture actuelle, sans l'API Data |
| 48 | + |
| 49 | +Déplacement des données froides dans une base dédiée en utilisant l'API de Pix pour les mettre à disposition. |
| 50 | + |
| 51 | + |
| 52 | + |
| 53 | +#### Avantages |
| 54 | + |
| 55 | +* Pas d'augmentation de la volumétrie de la BDD de production avec des données froides |
| 56 | +* L'architecture reste inchangée |
| 57 | +* Expérience de développement inchangée |
| 58 | +* Utilisation des contextes et objets métier |
| 59 | +* Gestion de l'authentification et des autorisations déjà en place |
| 60 | +* Infrastructure réseau présente : Baleen, monitoring, etc. |
| 61 | + |
| 62 | +#### Inconvénients |
| 63 | + |
| 64 | +- Le traffic lié à la mise à disposition de données impact la charge de l'API, alors que l'usage est spécifique et nécessite des données froides. |
| 65 | +- La disparité de temps de réponse des requêtes provoque des files d’attente de requêtes et une baisse de performance globale (erreurs 504). |
| 66 | + - d’un côté des appels du front qui utilisent le cache et sont rapides |
| 67 | + - de l’autre des appels de mise à disposition de données qui chargent des données froides en base et sont plus lents |
| 68 | + |
| 69 | +### Solution 2 : Reprendre l’API Data |
| 70 | + |
| 71 | +L'API Data actuelle se base sur des requêtes stockées dans une base qui sont jouées sur une base de données froide. |
| 72 | +Ces requêtes sont ajoutées en faisant une insertion dans une table. |
| 73 | + |
| 74 | + |
| 75 | + |
| 76 | +#### Avantages |
| 77 | + |
| 78 | +- L'équipe Data est autonome pour ajouter de nouvelles requêtes, de nouveaux utilisateurs et certaines permissions. |
| 79 | + |
| 80 | +#### Inconvénients |
| 81 | + |
| 82 | +- La gestion des authentifications et autorisations est très sommaire et différente de ce qui se fait sur l'API. |
| 83 | + Cela implique des audits de sécurité différents, et peut potentiellement provoquer des failles de sécurité. |
| 84 | + De plus, nous ne souhaitons pas forcément avoir deux bases d'utilisateurs distinctes. |
| 85 | +- Comme les requêtes et le schéma ne sont pas connus, les tests de non-régressions sont compliqués à mettre en place. |
| 86 | +- La mise à disposition d'une documentation des requêtes demanderait un développement spécifique à chaque requête, contrairement au déclaratif mis en place via Joi. |
| 87 | + |
| 88 | +### Solution 3 : Création d'une API de mise à disposition de données (base de code indépendante) |
| 89 | + |
| 90 | +Création d'une nouvelle API (MaDDo) contenant uniquement les routes de mise à disposition de données. L'authentification |
| 91 | +et les autorisations sont alors déléguées à l'API Pix. |
| 92 | +Cette API a pour base de données unique une base de données froides. |
| 93 | + |
| 94 | + |
| 95 | + |
| 96 | +#### Avantages |
| 97 | + |
| 98 | +* Routes de MaDDo et de l’API isolées |
| 99 | +* Base de code limitée aux nouveaux besoins |
| 100 | +* Scaling des conteneurs de cette API adapté au besoin |
| 101 | + |
| 102 | +#### Inconvénients |
| 103 | + |
| 104 | +* La gestion déléguée de l'authentification et des autorisations : |
| 105 | + * Crée une dépendance entre MaDDo et l'API Pix, qui amène une complexité non nécessaire qui perdure durant la |
| 106 | + maintenance du projet |
| 107 | + * Augmente le risque de sécurité du fait de l'absence d'utilisation d'un standard |
| 108 | +* Pas de partage de code métier avec l'API Pix (en l’absence de mise en place de bibliothèque partagée) : |
| 109 | + * ce qui oblige potentiellement à maintenir deux fois les mêmes modèles et règles métiers. Cela peut provoquer des |
| 110 | + désynchronisations. |
| 111 | + * ce qui rend le contract testing obligatoire pour assurer la non-régression. |
| 112 | + |
| 113 | +### Solution 4 : Création d'une API de mise à disposition de données (base de code mutualisée) |
| 114 | + |
| 115 | +Création d'une variante de l'API Pix, exposant uniquement les routes de mise à disposition de données. |
| 116 | +L'authentification et les autorisations sont donc gérées par le même code que pour l'API Pix. |
| 117 | + |
| 118 | +Cette API utilise deux bases de données : |
| 119 | + |
| 120 | +* une base de données froides en base principale |
| 121 | +* la base de données de Pix, notamment pour l'authentification et les autorisations |
| 122 | + |
| 123 | + |
| 124 | + |
| 125 | +#### Avantages |
| 126 | + |
| 127 | +* Expérience de développement inchangée |
| 128 | +* Code support (logging, healthcheck, etc.) et métier (modèles, règles, etc.) de l'API mutualisé |
| 129 | +* Routes de MaDDo et de l’API isolées |
| 130 | +* Scaling des conteneurs de cette API adapté au besoin |
| 131 | + |
| 132 | +#### Inconvénients |
| 133 | + |
| 134 | +* Les Review Apps doivent se partager leurs URL de connexion à la base de données : l'API met à jour l'API MaDDo pour |
| 135 | + lui donner la base de données live, et inversement pour la base de données froides. |
| 136 | +* Les Review Apps sont plus lourdes, car il y a une application supplémentaire à déployer. |
| 137 | +* Pour que Maddo puisse démarrer, il lui faut attendre le déploiement de l'API, afin que les migrations sur la base de |
| 138 | + données Pix aient été faites. |
| 139 | + |
| 140 | +## Décision |
| 141 | + |
| 142 | +La solution n°4 nous semble être le meilleur compromis pour permettre à une feature team de mettre à disposition de |
| 143 | +manière autonome de nouvelles données. |
| 144 | + |
| 145 | +Les points qui ont le plus motivé cette décision sont les suivants : |
| 146 | + |
| 147 | +* sécurité au niveau de celle de l'API Pix |
| 148 | +* expérience de développement favorisant l'autonomie des équipes |
| 149 | +* séparation des usages qui a pour conséquence la sécurisation des usages à destination des applications (front) |
| 150 | +* documentation des endpoints et données mis à disposition |
| 151 | + |
| 152 | +## Conséquences |
| 153 | + |
| 154 | +* Création d'une nouvelle infrastructure pour l’API MaDDo basée sur le code de l'API Pix |
| 155 | +* Les futurs travaux de mise à disposition des données sont à la charge des équipes de développement |
0 commit comments