GraphQL et REST : comparer besoins, coûts et contrôle des accès

À retenir

GraphQL permet au client de sélectionner des champs dans un schéma typé. Il peut compléter REST ; aucune des deux approches n’est automatiquement plus rapide ou plus sûre pour tous les usages.

Allée sécurisée de serveurs et de réseaux, sans personnel Illustration · scène fictive
Dans cet article

Comprendre la requête et son coût

L’exemple utilise un schéma fictif : customer, orders et total doivent exister dans l’API réelle. Une requête peut regrouper des données, mais déclencher plusieurs lectures côté serveur. REST peut aussi proposer des réponses adaptées. Un point d’entrée HTTP unique est courant avec GraphQL, sans être une propriété obligatoire de toute architecture.

query RecentOrders($id: ID!) {
  customer(id: $id) {
    name
    orders(first: 5) {
      nodes { id total }
    }
  }
}

Comparer sur une tâche représentative

  • Mesurez octets, latence, erreurs et travail serveur pour le même écran, les mêmes droits et des volumes réalistes.
  • Vérifiez pagination, regroupement des lectures pour limiter le problème N+1, stratégie de cache et isolation des données entre comptes.
  • Évaluez évolution du schéma, compatibilité des anciens clients, observabilité et effort d’exploitation ; conserver REST peut être le choix le plus simple.

Faire respecter les droits et les limites

Authentifiez les appels puis autorisez les objets et champs dans la logique métier. Limitez volume des listes, profondeur, alias, opérations groupées et coût estimé ; la seule fréquence des requêtes ne décrit pas leur charge. Masquer l’introspection ne remplace pas ces contrôles. Testez aussi les refus et les réponses partielles.

Références primaires

GraphQL : gouverner le schéma et le coût des requêtes

GraphQL donne au client un choix de champs, mais cette flexibilité exige des règles d’autorisation au niveau des objets et des champs. La limite de taille ou de profondeur seule ne remplace pas la mesure du travail réellement déclenché.

  • Tester champs sensibles et objets appartenant à un autre compte.
  • Limiter et observer coût, profondeur et nombre de requêtes selon le service.
  • Versionner les changements de schéma et exercer les anciens clients.

Référence primaire : OWASP — GraphQL Cheat Sheet. Méthode connexe : consulter le guide pratique.

ETag, cache HTTP et modifications concurrentes

REST et GraphQL : distinguer représentation et autorisation

Un ETag HTTP porte sur une représentation sélectionnée. Il n’est ni une permission sur chaque objet retourné ni un contrat de cohérence universel pour les entités GraphQL.

  • Définir quelles variantes d’une réponse possèdent leurs validateurs.
  • Tester les droits sur les champs et objets indépendamment des conditions HTTP.
  • Ne pas transposer automatiquement le scénario PUT à une mutation GraphQL ; préciser son contrat de concurrence.

Explorer les comparaisons et le simulateur ETag →

Références relues le · RFC 9110 · §13 · RFC 9111 · RFC 6585 · §3