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.
Réponses
Trop de publicités?Inconvénients:
- Vous devez apprendre comment mettre en place GraphQL. L'écosystème est encore en évolution rapide, de sorte que vous avez à suivre.
- Vous avez besoin d'envoyer les requêtes du client, vous pouvez simplement envoyer des chaînes de caractères, mais si vous voulez plus de confort et de mise en cache, vous allez utiliser un client de la bibliothèque -> code supplémentaire dans votre client
- Vous devez définir le schéma d'avance => travail supplémentaire avant d'obtenir des résultats
- Vous devez avoir un graphql point de terminaison sur votre serveur => de nouvelles bibliothèques que vous ne connaissez pas encore
- Graphql les requêtes sont plus d'octets que de simplement aller à un point de terminaison REST
- Le serveur a besoin de faire plus de traitement pour analyser la requête et de vérifier les paramètres
Mais, ceux-ci sont plus que compensé par les présentes:
- GraphQL est pas difficile à apprendre
- Le code supplémentaire est à seulement quelques KO
- Par la définition d'un schéma, vous permettra d' éviter beaucoup plus de travail après la correction des bugs et durable poilu mises à niveau
- Il y a beaucoup de gens de commutation à GraphQL il y a donc un riche écosystème de développement, avec un outillage très
- Lors de l'utilisation persistante des requêtes dans la production (en remplacement de GraphQL requêtes avec un simple ID et paramètres), vous envoyer moins d'octets que avec le RESTE
- Le traitement supplémentaire pour les requêtes entrantes est négligeable
- Offrant un nettoyage découplage de l'API et backend permet d'accélérer le itération sur le backend improvenments
J'ai trouvé quelques importantes préoccupations pour quiconque envisage d'utiliser GraphQL, et jusqu'à présent, les principaux points sont les suivants:
Requête pour une durée Indéterminée, Profondeur: GraphQL ne peut pas interroger en profondeur indéfinie, donc si vous avez un arbre et que vous voulez revenir à une branche sans en connaître la profondeur, vous devrez faire de la pagination.
La Réponse spécifique de la Structure: Dans GraphQL la réponse correspond à la forme de la requête, donc si vous avez besoin de répondre, dans une structure très spécifique, vous devrez ajouter une transformation de la couche de remodeler la réponse.
Cache au Niveau du Réseau: en Raison de la souvent façon GraphQL est utilisé sur HTTP (UN POSTE dans une seule extrémité), la mise en cache au niveau du réseau devient dur. Une façon de le résoudre est d'utiliser des Requêtes Persistantes.
La manipulation de Fichier à Télécharger: Il n'y a rien à propos de fichier télécharger dans le GraphQL de spécification et de mutations n'accepte 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 le RESTE) et de transmettre l'URL du fichier téléchargé à l'GraphQL mutation, ou d'injecter le fichier dans le contexte d'exécution, de sorte que vous aurez le fichier à l'intérieur du résolveur de fonctions.
Imprévisible d'Exécution: La nature de GraphQL est que vous pouvez interroger quelle que soit la combinaison de champs que vous voulez, mais, cette flexibilité n'est pas gratuit. Il y a certains problèmes qui sont bon à savoir, comme la Performance et N+1 Requêtes.
Super Simple Api: Dans le cas où vous avez un service qui expose vraiment une API simple, GraphQL ne fera qu'ajouter un supplément de complexité, de sorte qu'une simple API REST peut être mieux.
Ce plus gros problème que je vois avec graphQL je.e si vous utilisez des bases de données relationnelles est avec des jointures.
Le fait que vous pouvez autoriser/interdire les quelques champs qui rend les jointures non-trivial(pas simple). Ce qui conduit à des requêtes supplémentaires.
Aussi les requêtes Imbriquées dans graphql conduit à la circulaire requêtes et peut planter le serveur. Des précautions supplémentaires doivent être prises.
La limitation du débit d'appels devient difficile coz maintenant, l'utilisateur peut mettre le feu à plusieurs requêtes dans un appel.
ASTUCE: Utilisez facebook du dataloader de réduire le nombre de requêtes dans le cas de javascript/nœud
C'est de mieux en mieux chaque année, et comme pour l'instant, la communauté de GraphQL est croissante, et comme un résultat, il ya beaucoup plus de solutions à beaucoup de problèmes qui ont été mis en évidence dans d'autres réponses avant de. Mais admettre ce qui est toujours sociétés de portefeuille de jeter toutes les ressources de GraphQL je voudrais faire une liste de problèmes et de solutions, suivi par non résolus.
- Cache au Niveau du Réseau - comme Bruno l'a dit c'est a Persisté Requêtes et bien sûr, vous pouvez mettre en cache sur un client et personne ne vous empêche d'utiliser la mise en cache de données de niveau ou même Redis. Mais bien sûr, comme GraphQL a qu'un seul critère et chaque requête est différent, c'est beaucoup plus compliqué de faire ce type de mise en cache que avec le REPOS.
- Requêtes imbriquées dans GraphQL conduit à la circulaire requêtes et peut faire planter l' serveur - pas de problème avec une grande variété de solutions. Certains d'entre eux sont énumérés ici
- La manipulation de Fichiers Télécharger - nous avons déjà beaucoup de solutions pour cela
Mais il y a quelques cas qui peuvent être considérés comme des inconvénients:
- passe-partout de démesure ( je veux dire par là, par la création par exemple de nouvelles de requête, vous devez définir un schéma, de résolution et à l'intérieur de l'outil de résolution de préciser explicitement GraphQL comment résoudre vos données et les champs à l'intérieur, sur le côté client de créer une requête avec exactement les domaines liés à ces données)
- gestion des erreurs - je besoin de dire que c'est plus lié à la comparaison avec le RESTE. Il est possible ici avec apollon , mais à la en même temps c'est beaucoup plus compliqué que dans le RESTE de
- l'authentification et l'autorisation , mais comme je l'ai dit, la communauté est en augmentation avec une vitesse exceptionnelle et il y a déjà couple de solutions pour atteindre cet objectif.
Pour résumer, GraphQL est juste un outil pour atteindre des buts précis et pour sûr, ce n'est pas une solution miracle à tous les problèmes et, bien sûr, pas un remplacement pour le REPOS.