API - Normes
ADR log
22/11/2024 : Première version
Objectifs
Le but est de définir les protocoles d'échanges via APIs utilisables par l'ensemble des applicatifs de manière à unifier les mécanismes de transfert de données.
Nous définirons des protocoles techniques, des types d'APIs et les prérequis applicables, les solutions techniques de création/consommation de ces APIs ne sont pas abordés (sous-entendu les choix techniques de framework de développement ne seront pas définis ici).
Exigences
Fonctionnelles
Facilité d'intégration dans un système tiers
Flexibilité de la requête
Flexibilité du format de données
Echange de données efficace
Non-fonctionnelles
Facilité de maintenance
Capacité de débug
Sécurisation des échanges en transit
Mise à l'échelle
Performance
Contraintes techniques et organisationnelles
Non lié à un outil technique/un langage de programmation/éditeur spécifique
Des compétences techniques doivent être présentes sur le marché et en interne
Solutions proposées
REST (Representational State Transfer)
REST est un style d'architecture basé sur HTTP utilisant les verbes standards du protocole pour manipuler des ressources. Il est stateless et utilise généralement du JSON pour le format de données.
SOAP (Simple Object Access Protocol)
SOAP est un protocole basé sur XML pour échanger des messages structurés. Il est indépendant du protocole de transport et propose des fonctionnalités avancées en particulier la gestion des transactions.
Webhook
Un webhook est un mécanisme de callback HTTP permettant de recevoir des notifications depuis un service externe.
Graphql
Graphql est un langage de requête pour API permettant aux clients de demander exactement les données nécessaires en présentant un point d'entrée unique pour toutes les opérations.
Analyse comparative
Flexibilité
Bonne
Faible
Moyenne
Elevée
Performance
Bonne
Moyenne
Très bonne
Bonne
Complexité
Faible
Elevée
Faible
Moyenne
Sécurité
Bonne
Très bonne
Moyenne
Bonne
Scalabilité
Très bonne
Bonne
Très bonne
Bonne
Expérience développeur
Très bonne
Moyenne
Bonne
Très bonne
Recommandations
Pour l'immense majorité des applications des appels REST sont suffisants en particulier s'il s'agit d'APIs simples.
GraphQL peut être considéré en particulier s'il s'agit de livrer une API publique servant divers types de client ou alors des dashboards avec des besoins de données variés.
Les webhooks sont à considérer dans le cadre d'intégration de systèmes tiers (Github, Mattermost, services SaaS en général) mais à éviter au-delà la majorité des applications étant synchrones.
SOAP est à éviter sauf contraintes techniques avérées.
Dernière mise à jour