Pourquoi l’intégration API est essentielle dans les plateformes modernes
Insights/ Architecture web & plateformes / APIs & intégrations
25 juin 2024 - 09 min de lecture

Une intégration est un contrat, pas un câble
Le mot « intégration » est souvent employé comme s’il décrivait un câble : on relie le système A au système B, les données passent, la case est cochée. Le cadrage en câble est ce qui produit les intégrations qui marchent trois mois et cassent ensuite d’une manière que personne n’est prêt à corriger. Un cadrage plus utile, c’est qu’une intégration est un contrat entre deux systèmes, avec des versions, des attentes, des modes de défaillance et un propriétaire. Une fois traitée comme un contrat, les bonnes questions de conception deviennent évidentes ; tant qu’elle est traitée comme un câble, elles restent invisibles jusqu’à ce que les incidents de production les fassent remonter.
Les plateformes modernes vivent d’intégrations. Le CRM parle à l’outil marketing, l’outil marketing parle à l’entrepôt analytique, l’entrepôt alimente les tableaux de bord, les tableaux de bord informent la campagne suivante. Chaque maillon de cette chaîne est un contrat que quelqu’un a signé, souvent implicitement. Les plateformes qui s’accumulent au fil des années sont celles dont les équipes ont compris ce qu’elles signaient ; celles qui se dégradent sont celles qui pensaient juste « connecter des outils ». Cet article prend la suite de l’article sur la conception de plateformes ONG et de l’article sur les plateformes web scalables ; l’angle ici est plus serré, sur la couche d’intégration spécifiquement.
Le vrai coût d’une intégration se paie en année deux
Le premier coût d’une intégration, c’est la construction : écrire le client API, mapper les champs, lancer les tests, livrer. Ce coût est petit et visible. Le second coût, c’est le coût opérationnel sur les deux années suivantes, et il est grand et invisible au moment où le contrat est signé. Il inclut la montée de version qui change la forme de la réponse, la limite d’appels modifiée sans préavis, le champ qui change de nom, le flux d’authentification qui ajoute une étape, et le matin où le système amont est tombé et où trois tableaux de bord affichent zéro.
La plupart des regrets d’intégration se construisent au moment du build, quand personne ne s’est arrêté pour demander « qui maintient cela dans dix-huit mois ». La meilleure question consiste à dimensionner honnêtement le coût opérationnel en amont : à quelle fréquence ce contrat change-t-il, comment le changement est-il communiqué, qui détecte une rupture, combien de temps acceptons-nous que l’intégration soit silencieusement fausse avant que quelqu’un ne s’en aperçoive. Une équipe qui répond à ces questions avant d’écrire le client a tendance à livrer moins d’intégrations et à les payer moins cher dans la durée. Une équipe qui ne le fait pas en livre beaucoup et accumule une taxe lente que personne n’a chiffrée.
Choisir le système de référence avant de concevoir l’API
La décision la plus lourde de conséquences dans toute intégration, c’est de désigner quel système est la source de vérité pour l’entité à transporter. Si la fiche client peut être modifiée dans le CRM, dans l’outil de support et dans le système de facturation, l’intégration ne peut pas résoudre le conflit ; elle ne peut que le propager. La plupart des problèmes de « qualité de données » signalés comme bogues dans les tableaux de bord sont en réalité des problèmes de système de référence qui n’ont pas été tranchés au moment de l’intégration.
Le bon mouvement consiste à nommer explicitement le système de référence pour chaque entité (client, bénéficiaire, facture, contenu), et à concevoir chaque intégration comme un flux à sens unique depuis ce système vers les autres, les autres étant traités comme des miroirs en lecture seule qui doivent demander à la source pour modifier un champ. La synchronisation à double sens est parfois nécessaire, mais elle doit être un choix délibéré accompagné d’une règle de résolution de conflit documentée, pas le défaut. Les intégrations qui semblent simples sur les diagrammes et deviennent ingérables en pratique sont presque toujours des synchronisations à double sens que personne n’a conçues comme telles.
Synchrone, asynchrone, batch : choisir une fois, en assumer les conséquences
Trois modes font l’essentiel du travail dans les plateformes réelles, et chacun porte des propriétés opérationnelles différentes. Les appels synchrones (l’utilisateur clique, le système interroge l’API amont, la réponse façonne la page) sont simples à raisonner et fragiles à la latence amont. Les flux asynchrones (le système met un événement en file, l’amont le reçoit plus tard) sont plus résilients et plus difficiles à déboguer. Les jobs batch (toutes les quinze minutes ou chaque nuit, les systèmes se réconcilient) sont opérationnellement bon marché et produisent des données toujours légèrement périmées.
L’erreur consiste à choisir un seul mode pour toute la plateforme, ou à les mélanger par accident parce que différents développeurs livrent différentes intégrations. L’approche plus propre consiste à décider, par intégration, quel mode le contrat impose, et à rendre cette décision visible : un webhook est asynchrone et cela implique certaines choses sur l’idempotence et la reprise ; un appel REST dans une requête est synchrone et cela implique un budget de latence amont ; un batch nocturne est un batch et cela implique que les consommateurs aval ne peuvent pas espérer une fraîcheur en temps réel. Quand le mode est nommé, les modes de défaillance deviennent prévisibles. Quand il est implicite, chaque intégration est sa propre surprise.
La fiabilité vit dans les frontières, pas à l’intérieur des services
La plupart des problèmes de fiabilité dans les plateformes modernes ne vivent pas à l’intérieur des services. Ils vivent aux frontières entre services : le webhook réessayé trois fois puis silencieusement abandonné, la réponse partiellement consommée avant la coupure de connexion, la migration qui a mis à jour un côté de l’intégration avant l’autre. Traiter ces frontières comme des surfaces d’ingénierie de premier rang, et non comme du code de colle, est la discipline opérationnelle la plus rentable qu’une équipe plateforme peut adopter.
Quelques patterns font l’essentiel. Des clés d’idempotence sur chaque écriture, pour qu’une reprise ne facture pas deux fois. Des reprises bornées avec backoff, pour qu’une panne aval ne se transforme pas en troupeau tonnant. Des dead-letter queues pour les événements que le système ne peut vraiment pas traiter, plutôt que des abandons silencieux. Un test de contrat sur chaque intégration, qui fait échouer le build quand la forme amont change d’une manière que le code ne prévoit pas. Rien d’exotique ; toute la différence entre une plateforme qui tient à 2h du matin et une plateforme qui ne tient pas.
Propriété : qui paie quand l’intégration casse à 2h du matin
Les intégrations cassent. La question qui décide de la survie de la plateforme, c’est de savoir si quelqu’un est responsable de les corriger, et si cette personne a les accès, le runbook et l’autorité pour le faire. Beaucoup de plateformes livrent des intégrations sans propriétaire nommé : la développeuse qui a écrit le client d’origine est partie, l’équipe ops considère que c’est un problème dev, l’équipe dev considère que c’est un problème ops, et l’intégration vit dans un état de fragilité non assumée jusqu’à ce que quelque chose de visible casse.
Un pattern utile consiste à nommer un propriétaire par intégration au même endroit que la documentation de l’intégration, à côté de trois choses : le runbook des défaillances les plus fréquentes, les identifiants d’accès dont la personne d’astreinte a besoin, et le contact amont (l’adresse de support du fournisseur, l’équipe partenaire) qui peut confirmer si le problème est en amont. Sans ces trois éléments, « l’intégration est cassée » devient une chasse au trésor de trente minutes à chaque fois. Avec eux, c’est un correctif de quinze minutes.
La supervision fait partie de l’intégration, elle ne se rajoute pas
L’état par défaut de la plupart des intégrations, c’est que personne ne remarque la rupture avant qu’un utilisateur ne la remarque. À ce moment-là, des heures ou des jours ont passé, les tableaux de bord sont faux, et le coût de récupération est bien plus élevé qu’il ne l’aurait été. Superviser une intégration n’est pas un projet à part ; cela fait partie de la définition de « terminé ».
La version minimale est petite et vaut l’effort : un check synthétique qui exerce le contrat à cadence régulière, une alerte quand le taux de succès passe sous un seuil défini, un panneau de tableau de bord qui montre la santé de l’intégration à côté des éléments qui en dépendent. Pour les plateformes qui couvrent plusieurs intégrations, une page unique de santé des intégrations est plus utile qu’un système de supervision par outil, parce qu’elle reflète la manière dont les opérateurs pensent à la plateforme quand quelque chose va mal : pas « le CRM est-il en ligne », mais « les données circulent-elles comme elles devraient ».
Comment mettre cela en pratique
Les intégrations API sont le tissu conjonctif porteur des plateformes modernes, et ce sont aussi le lieu où s’accumule l’essentiel de la dette opérationnelle. Les plateformes qui s’accumulent traitent chaque intégration comme un contrat avec un propriétaire nommé, un mode explicite, un système de référence, des frontières idempotentes et une santé observable. Celles qui se dégradent traitent les intégrations comme de la colle et paient ce choix en année deux. Pour la couche structurelle de conception de plateformes qui entoure ces décisions d’intégration, le cluster architecture web et plateformes rassemble les analyses associées.
Si la question est passée de « il faut connecter l’outil X à l’outil Y » à « il nous faut une couche d’intégration que l’on puisse raisonner et opérer sans surprises », c’est exactement le terrain de mon accompagnement développement API et intégration de systèmes.
- Haja Faniry
Services liés
Développement d’API & Intégration de Systèmes
Développement d’API et intégration de systèmes permettant de connecter les plateformes numériques et d’automatiser les échanges de données.
Développement d'applications web
Développement d'applications web sur mesure pour entreprises, startups et organisations internationales.


