Tous les articles sur GraphQL vous diront à quel point c'est merveilleux, mais y a-t-il des inconvénients ou des inconvénients? Je vous remercie.
Désavantages:
Mais, ceux-ci sont plus que contrés par ceux-ci:
J'ai trouvé quelques points importants problèmes pour ceux qui envisagent d'utiliser GraphQL , et jusqu'à présent, les points principaux sont les suivants:
Requête en profondeur indéfinie : GraphQL ne peut pas interroger en profondeur indéfinie. Par conséquent, si vous avez un arbre et souhaitez renvoyer une branche sans connaître la profondeur, vous faire de la pagination.
Structure de réponse spécifique : dans GraphQL, la réponse correspond à la forme de la requête. Par conséquent, si vous devez répondre dans une structure très spécifique, vous devrez ajoutez une couche de transformation pour remodeler la réponse.
Cache au niveau du réseau : en raison de la manière habituelle dont GraphQL est utilisé sur HTTP (A POST sur un seul noeud final) , le cache au niveau du réseau devient difficile.Le moyen de le résoudre consiste à utiliser les requêtes persistantes.
Gestion du téléchargement de fichiers : la spécification GraphQL n’a rien à voir avec le téléchargement de fichiers et les mutations n’acceptent pas les fichiers dans les arguments. Pour résoudre ce problème, vous pouvez télécharger des fichiers à l’aide d’autres types d’API (REST, par exemple) et transmettre l’URL du fichier téléchargé à la mutation GraphQL, ou injecter le fichier dans le contexte d’exécution afin que le fichier soit intégré aux fonctions de résolution.
Exécution imprévisible : La nature de GraphQL est que vous pouvez interroger en combinant tous les champs que vous voulez mais cette flexibilité n'est pas gratuite. Certaines préoccupations intéressantes, telles que les requêtes de performances et N + 1.
API super simples : si vous avez un service qui expose une API très simple, GraphQL ne fera qu'ajouter une complexité supplémentaire, donc un simple REST API peut être mieux.
Ce plus gros problème que je vois avec graphQL, c’est-à-dire si vous utilisez une base de données relationnelle, est avec jointures.
Le fait que vous puissiez autoriser/interdire quelques champs rend les jointures non triviales (pas simples). Ce qui conduit à des requêtes supplémentaires.
De plus, les requêtes imbriquées dans graphql conduisent à des requêtes circulaires et peuvent planter le serveur. Des précautions supplémentaires doivent être prises.
La limitation du débit devient difficile car l’utilisateur peut maintenant lancer plusieurs requêtes en un seul appel.
TIP : Utilisez le dataloader de Facebook pour réduire le nombre de requêtes en cas d'utilisation de javascript/node
Cela va de mieux en mieux chaque année, et pour l’instant, la communauté de GraphQL est en croissance et, par conséquent, il existe beaucoup plus de solutions à beaucoup de problèmes qui ont déjà été soulignés dans d’autres réponses précédentes. Mais pour admettre que ce qui empêche encore les entreprises de consacrer toutes leurs ressources à GraphQL, j'aimerais énumérer quelques problèmes et solutions suivis par des problèmes non résolus.
Mais il y a quelques autres cas qui peuvent être considérés comme des inconvénients:
Pour résumer, GraphQL n’est qu’un outil pour des objectifs spécifiques et, à coup sûr, ce n’est pas une solution miracle à tous les problèmes et, bien sûr, ne remplace pas REST.
C'est vraiment génial d'avoir un seul terminal et d'exposer toutes les données. Je trouve ci-dessous des points à prendre en compte pour GraphQL:
En outre, il convient de considérer les avantages après sa mise en œuvre:
Facile d'ajouter des conditions en utilisant des arguments et un ordre personnalisé une fois implémenté
Utilisez beaucoup de filtres personnalisés et supprimez toutes les actions à créer. Par exemple, un utilisateur peut avoir comme identifiant, nom, etc. comme argument et effectuer le filtrage. De plus, les filtres peuvent également être appliqués aux groupes des utilisateurs.
Je pense que graphql pour le moment doit faire partie de l'architecture dorsale, pour le téléchargement de fichiers, vous devez toujours cliquer