Tous les articles sur GraphQL vous diront à quel point c'est merveilleux, mais y a-t-il des inconvénients ou des lacunes? Je vous remercie.
Réponses:
Désavantages:
Mais, ceux-ci sont plus que contrés par ceux-ci:
graphql-spring-boot-starter
et graphql-java-tools
commencer. Créez votre schéma dans la ressource .graphqls et créez des classes Resolver et vous avez terminé. Pour qu'un exemple de test fonctionnel soit opérationnel, il a fallu environ 10 minutes.
J'ai trouvé des préoccupations importantes pour quiconque envisage d'utiliser GraphQL , et jusqu'à présent, les principaux points sont:
Requête en profondeur indéfinie : GraphQL ne peut pas interroger en profondeur indéfinie, donc si vous avez un arbre et que vous souhaitez renvoyer une branche sans connaître la profondeur, vous devrez faire une pagination.
Structure de réponse spécifique : dans GraphQL, la réponse correspond à la forme de la requête, donc si vous devez répondre dans une structure très spécifique, vous devrez ajouter une couche de transformation pour remodeler la réponse.
Cache au niveau du réseau : en raison de la façon dont GraphQL est généralement utilisé sur HTTP (un POST dans un seul point de terminaison), le cache au niveau du réseau devient difficile. Un moyen de le résoudre consiste à utiliser des requêtes persistantes.
Gestion du téléchargement de fichier : Il n'y a rien sur le téléchargement de fichier dans la spécification GraphQL et les mutations n'acceptent pas les fichiers dans les arguments. Pour le résoudre, vous pouvez télécharger des fichiers en utilisant d'autres types d'API (comme REST) et transmettre l'URL du fichier téléchargé à la mutation GraphQL, ou injecter le fichier dans le contexte d'exécution, de sorte que vous aurez le fichier dans les fonctions du résolveur.
Exécution imprévisible : La nature de GraphQL est que vous pouvez interroger en combinant les champs de votre choix, mais cette flexibilité n'est pas gratuite. Il est bon de connaître certaines préoccupations telles que les performances et les requêtes N + 1.
API super simples : dans le cas où vous avez un service qui expose une API vraiment simple, GraphQL ne fera qu'ajouter une complexité supplémentaire, donc une API REST simple peut être meilleure.
Ce plus gros problème que je vois avec graphQL ie si vous utilisez avec une base de données relationnelle est avec les 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.
Les requêtes imbriquées dans graphql conduisent également à des requêtes circulaires et peuvent planter le serveur . Des précautions supplémentaires doivent être prises.
La limitation du débit des appels devient difficile car l'utilisateur peut désormais lancer plusieurs requêtes en un seul appel.
CONSEIL : utilisez le chargeur de données de Facebook pour réduire le nombre de requêtes en cas de javascript / node
cost
à la demande. Ce n'est pas non plus un problème si vous utilisez des requêtes prédéfinies, où le client envoie uniquement l'ID.
Cela va de mieux en mieux chaque année, et comme pour le moment, la communauté de GraphQL s'agrandit, et par conséquent, il y a beaucoup plus de solutions à beaucoup de problèmes qui ont été mis en évidence dans d'autres réponses auparavant. Mais pour admettre ce qui empêche encore les entreprises de consacrer toutes leurs ressources à GraphQL, j'aimerais énumérer quelques problèmes et solutions suivis de ceux 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 ce n'est certainement pas une solution miracle à tous les problèmes et bien sûr pas un remplacement pour REST.
C'est vraiment génial d'avoir un seul point de terminaison et d'exposer toutes les données. Je trouve ci-dessous les points à considérer pour GraphQL:
En outre, il convient de considérer les avantages après sa mise en œuvre:
Facile à ajouter des conditions en utilisant des arguments et un ordre personnalisé une fois implémenté
Utilisez beaucoup de filtres personnalisés et débarrassez-vous de toutes les actions qui doivent être créées, par exemple un utilisateur peut avoir un identifiant, un nom, etc. comme arguments 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 du backend, pour le téléchargement de fichiers, vous utilisez toujours une API régulière