tadata
← Retour à l'accueil

Design d'API : REST, GraphQL, gRPC et Choix Stratégiques

#api#architecture#rest#graphql#grpc

Les APIs sont les contrats entre systèmes. Le choix du style d'API, de la stratégie de versionnement et du modèle de gouvernance façonne la collaboration entre équipes et l'évolution des systèmes. C'est une décision architecturale, pas seulement technique.

Comparaison des styles d'API

AspectRESTGraphQLgRPC
ProtocoleHTTP/1.1 ou HTTP/2HTTP (endpoint unique)HTTP/2
Format de donnéesJSON (typiquement)JSONProtobuf (binaire)
SchemaOpenAPI/Swagger (optionnel)SDL (obligatoire)Fichiers proto (obligatoire)
DécouvrabilitéHATEOAS, docsIntrospection intégréePartage de fichiers proto
Over-fetchingProblème courantRésolu par conceptionField masks (optionnel)
Under-fetchingMultiples allers-retoursRequête uniqueConçu par RPC
StreamingLimité (SSE, WebSocket)SubscriptionsStreaming bidirectionnel
Support navigateurNatifNatifNécessite un proxy (gRPC-web)
CacheCache HTTP intégréComplexe (requêtes POST)Implémentation custom
Courbe d'apprentissageFaibleMoyenneMoyenne-Haute

Quand utiliser quoi

  • REST -- APIs publiques, CRUD simple, quand le cache HTTP compte, compatibilité large
  • GraphQL -- requêtes pilotées par le client, apps mobiles avec contraintes de bande passante, agrégation de backends
  • gRPC -- communication inter-services, haute performance, cas de streaming

Stratégies de versionnement

StratégieExempleAvantagesInconvénients
Chemin URL/api/v2/usersSimple, explicitePollution d'URL
Paramètre de requête/api/users?version=2Facile par défautFacile à manquer
HeaderAccept: application/vnd.api.v2+jsonURLs propresCache, plus dur à tester
Sans versionnement (évolution)Ajouter des champs, jamais supprimerPas de gestion de versionDiscipline stricte requise

Approche recommandée : versionnement par URL pour les APIs externes (clarté), évolution pour les APIs internes (moins d'overhead).

Patterns API Gateway

Une API gateway se place entre les clients et les services backend :

  • Routage -- diriger les requêtes vers le bon service
  • Authentification -- valider les tokens avant d'atteindre les backends
  • Rate limiting -- protéger les backends contre les abus
  • Transformation -- agréger ou remodeler les réponses
  • Cache -- réduire la charge backend pour les requêtes répétées
  • Monitoring -- logging et métriques centralisés

Options populaires : Kong, AWS API Gateway, GCP API Gateway, Traefik, Envoy.

tadata
{ } API gateway 1 JWT: alg, iss, aud, exp 2 Scopes per route (API5) 3 Token bucket (API4) 4 Quota on costly calls 5 Schema check (API3) 6 Declared routes (API9) Web app Mobile app Partner Orders GET /v2/orders/{id} Users GET /v2/users/me Reports POST /v2/exports410 /v1/* (retired)
{ } API gateway 1 JWT: alg, iss, aud, exp 2 Scopes per route (API5) 3 Token bucket (API4) 4 Quota on costly calls 5 Schema check (API3) 6 Declared routes (API9) Web app Mobile app Partner Orders GET /v2/orders/{id} Users GET /v2/users/me Reports POST /v2/exports410 /v1/* (retired)
Où se placent les contrôles de l'API Top 10 au niveau de la gateway. Le rate limiting (API4) se base sur le token, pas sur l'IP (NAT, proxies) : le token bucket autorise des rafales contrôlées, les fenêtres fixes laissent passer des rafales aux frontières ; répondre 429 Too Many Requests (RFC 6585) avec Retry-After. Les contrôles BOLA (API1) et BFLA (API5) ne peuvent pas vivre ici : le backend doit comparer le propriétaire de l'objet avec l'appelant

Extrait de la fiche « OWASP API Security Top 10, Part 2: Testing, GraphQL, Rate Limits, Tokens » · Demander la fiche complète

Design API-First

Concevoir l'API avant d'écrire le code d'implémentation :

  1. Définir le contrat (spec OpenAPI, schéma GraphQL, ou fichier proto)
  2. Générer des serveurs mock pour que les équipes frontend démarrent immédiatement
  3. Générer automatiquement les SDKs clients
  4. Implémenter le backend selon le contrat
  5. Les tests de contrat valident la conformité

APIs internes vs externes

AspectAPIs internesAPIs externes
AudienceVos propres services/équipesDéveloppeurs tiers
VersionnementPeut être plus agressifDoit être conservateur
Breaking changesCoordination inter-équipesPériodes de dépréciation requises
AuthentificationService mesh, mTLSClés API, OAuth 2.0
Rate limitingBasé sur la confianceStrict, par paliers
DocumentationPeut être informelleDoit être exhaustive
tadata
AlgorithmRuleBehaviour
Fixed windowcount_([t_0, t_0+W)) ≤ Lsimple; allows 2L at a window boundary
Sliding windowcount_((t-W, t]) ≤ Lsmooth; used by most cloud WAF rate rules
Token buckettokens = min(B, tokens + r Δ t)rate r with bursts up to B; each request spends one token

Extrait de la fiche « WAF and API Gateway Configuration » · Demander la fiche complète

Ressources

Nous utilisons des cookies analytiques pour améliorer votre expérience. Aucune donnée personnelle n'est collectée.