Qu'est-ce que l'Overfetching ?
À la base de la recommandation de GraphQL se trouve un concept appelé overfetching. Dans de nombreuses API, lorsque vous demandez un objet, l'API renvoie tout ce qu'elle sait, car elle ne sait pas ce qui vous intéresse. GraphQL (comme SQL) vous permet de dire précisément à l'API ce que vous recherchez avant qu'elle ne fasse la requête.
C'est comme entrer dans un restaurant et demander qu'on vous apporte tout le menu sur la table, puis choisir votre entrée, plat principal et dessert. Le reste est gaspillé.
Un Exemple Pratique
Considérez une requête via une application imaginaire de serveur portable :
query foodPricesForOrder {
menuItem(id: "Jxkjahdkfh==") {
id
description
longDescription
calories
price
picture
}
}
Que se passerait-il si nous omettions longDescription ? Nous économiserions du trafic réseau, même si la requête réelle à la base de données ne serait pas notablement plus rapide si tous les champs se trouvent dans la même table.
Mais regardez le champ picture — il pourrait s'agir d'une image encodée en base64. Nous ne voulons pas cela sur une application portable pour serveur. En REST, nous n'aurions pas d'autre choix que de la recevoir, ou le développeur de l'API devrait créer un point de terminaison séparé pour les images. Pire encore, la solution REST pourrait obliger le client à faire des appels séparés pour chaque plat.
Comment GraphQL Résout Cela
GraphQL vous permet de demander uniquement ce dont vous avez besoin. Si un resolver est attaché au champ picture (dans AppSync, Apollo, ou tout serveur GraphQL), il ne s'active que lorsque ce champ apparaît dans la requête. Tant que vous ne l'incluez pas, vous ne payez pas son prix.
Cela s'applique à toute l'API Legalesign. Les champs qui nécessitent des recherches coûteuses — objets liés, valeurs calculées, grosses charges utiles — ne sont résolus que lorsque vous les demandez.
La Conclusion
Lors de la conception de vos requêtes, réfléchissez aux champs dont vous avez réellement besoin. Éliminez tout ce que votre interface utilisateur n'utilise pas. Vous réduirez la taille des charges utiles, la latence réseau et le calcul côté serveur.
Voir Concevoir des Requêtes pour des conseils pratiques supplémentaires.