5 points par GN⁺ 2025-12-15 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • GraphQL cherche à résoudre le problème de sur-sollicitation des données, mais dans la plupart des environnements d’entreprise, ce problème est déjà résolu autrement
  • Dans les systèmes d’entreprise où l’architecture BFF (Backend for Frontend) est devenue la norme, l’intérêt principal de GraphQL diminue fortement
  • Complexité d’implémentation, baisse de l’observabilité, problèmes de cache, contraintes sur les ID, traitement peu pratique des fichiers : autant de facteurs qui alourdissent le coût en production
  • REST est simple et rapide, et facilite la gestion des erreurs comme l’onboarding, ce qui le rend plus efficace dans les environnements avec de grandes équipes
  • En conclusion, GraphQL est utile dans certains cas, mais constitue un choix excessif pour la plupart des entreprises

Le problème que GraphQL cherche à résoudre

  • L’objectif central de GraphQL est d’éviter l’overfetching (récupération excessive de données inutiles)
    • Le client ne demande que les champs nécessaires, ce qui réduit les transferts de données inutiles
    • Autre avantage : il n’est pas nécessaire de modifier le backend à chaque nouvelle exigence de l’interface utilisateur
  • Mais dans la réalité, cette architecture idéale ne correspond pas à la complexité du terrain

L’overfetching déjà résolu par le BFF

  • La plupart des frontends d’entreprise utilisent déjà une couche BFF (Backend for Frontend)
    • Elle assemble les données selon les besoins de l’UI, agrège plusieurs appels downstream et masque la complexité du backend
  • Un BFF fondé sur REST peut déjà ne renvoyer que les données nécessaires, ce qui duplique l’avantage de GraphQL
  • Si la couche GraphQL récupère ses données depuis des API REST, l’overfetching est simplement déplacé d’un niveau plus bas
  • GraphQL peut être utile lorsque plusieurs pages partagent le même endpoint, mais
    • ce bénéfice revient souvent à accepter davantage de configuration et de maintenance pour économiser quelques kilo-octets

Complexité d’implémentation et baisse de productivité

  • GraphQL demande beaucoup plus de temps et de complexité d’implémentation que REST
    • Il faut définir le schéma, les types, les resolvers, les sources de données, etc.
    • Il faut aussi maintenir la synchronisation entre le schéma et les clients
  • GraphQL optimise la consommation (confort côté client), mais au détriment de la production (vitesse de développement côté serveur)
  • En environnement d’entreprise, la vitesse de production et la simplicité sont souvent plus importantes

Problèmes d’observabilité et de monitoring

  • Le système de codes de statut HTTP de GraphQL est peu cohérent
    • Une réponse 200 peut contenir des erreurs, ce qui complique la distinction entre succès et échec dans le monitoring
  • Avec REST, les 2XX/4XX/5XX permettent une séparation claire, ce qui rend le filtrage dans les dashboards plus intuitif
  • Des outils comme Apollo permettent des personnalisations, mais cela entraîne davantage de configuration et de charge mentale
  • En cas d’incident en production, identifier le problème est plus difficile et plus complexe qu’avec REST

Les limites concrètes du cache

  • Le cache normalisé (normalized caching) d’Apollo est théoriquement puissant, mais en pratique fragile et complexe
    • Deux requêtes qui ne diffèrent que par un seul champ sont traitées séparément, ce qui impose des raccords manuels
    • Le débogage du cache devient un problème à part entière
  • À l’inverse, REST peut simplement mettre en cache la réponse complète, ce qui le rend plus stable et plus facile à maintenir

Le problème des contraintes sur les champs ID

  • Apollo part du principe que tous les objets possèdent un champ id ou _id
    • Or, de nombreuses API d’entreprise n’ont pas d’ID unique, ou pas d’identifiant global
  • Pour s’adapter à cette contrainte, le BFF doit ajouter une logique de génération d’ID locaux
    • Résultat : plus de champs et plus de logique inutiles, ce qui annule en partie le gain sur l’overfetching

L’inefficacité des uploads et téléchargements de fichiers

  • GraphQL est mal adapté au traitement des données binaires
    • En pratique, on renvoie une URL de téléchargement et le fichier transite via REST
    • Inclure de gros volumes de données comme des PDF dans une réponse GraphQL dégrade les performances
  • Cela brise l’idéal de l’API unique promis par GraphQL

Onboarding et courbe d’apprentissage

  • La plupart des développeurs ont beaucoup d’expérience avec REST, alors que GraphQL demande un apprentissage
    • Il faut assimiler de nouveaux concepts : schéma, resolvers, composition des requêtes, règles de cache, gestion des erreurs, etc.
  • Cela ralentit l’onboarding des équipes
  • REST reste une approche « ennuyeuse mais hautement scalable », donc bien adaptée aux grandes équipes

La complexité de la gestion des erreurs

  • Les réponses d’erreur GraphQL sont complexes, avec champs nullable, partial data, tableau errors, codes de statut étendus, etc.
    • Il faut en plus retrouver quel resolver a échoué
  • Avec REST, un simple 400 ou 500 suffit souvent, ce qui facilite la compréhension et le débogage

Conclusion : GraphQL reste une technologie de niche

  • GraphQL est un outil valable dans certaines situations
    • Mais dans la plupart des environnements d’entreprise, les problèmes sont déjà résolus avec BFF et REST
    • Les vrais enjeux ne sont pas l’overfetching, mais l’observabilité, la fiabilité et la vitesse
  • Au final, GraphQL résout un problème étroit au prix d’une complexité plus large
  • La conclusion est donc : GraphQL n’est pas mauvais, mais dans la plupart des cas, il n’est pas nécessaire

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.