263 votes

Architecture GraphQL et Microservice

J'essaie de comprendre d'où GraphQL est plus appropriée pour l'utilisation dans un Microservice architecture.

Il y a débat sur le fait d'avoir seulement 1 GraphQL schéma qui fonctionne comme une Passerelle API proxy la demande de la cible microservices et le fait de contraindre leur réponse. Microservices encore le REPOS / Épargne protocole de communication de la pensée.

Une autre approche est qu'au lieu d'avoir plusieurs GraphQL schémas de un par microservice. Ayant une petite Passerelle API serveur acheminer la demande de la cible microservice avec toutes les informations de la demande + le GraphQL requête.

1ère Approche

Avoir 1 GraphQL Schéma de l'API de Passerelle sera un inconvénient à chaque fois que vous modifiez votre microservice contrat d'entrée/sortie, nous devons changer le GraphQL Schéma, par conséquent, sur la Passerelle API Côté.

2ème Approche

Si vous utilisez Plusieurs GraphQL Schéma par microservices, a de sens que dans un sens parce que GraphQL applique une définition de schéma, et le consommateur aura besoin à l'égard d'entrée/sortie de données par la microservice.

Questions

  • Où trouvez-vous GraphQL le bon ajustement pour la conception de microservice architecture?

  • Comment voulez-vous concevoir une Passerelle API avec un possible GraphQL mise en œuvre?

336voto

helfer Points 3572

Certainement l'approche #1.

D'avoir vos clients à parler à plusieurs GraphQL services (comme dans l'approche #2) entièrement défait le but de l'utilisation de GraphQL en premier lieu, qui est de fournir un schéma au-dessus de votre ensemble de données de l'application pour permettre l'extraction dans un seul aller-retour.

Avoir un sans partage de l'architecture pourrait sembler raisonnable de la microservices point de vue, mais pour votre code côté client c'est un cauchemar absolu, parce que chaque fois que vous modifiez l'un de vos microservices, vous devez mettre à jour tous de vos clients. Vous aurez certainement le regretter.

GraphQL et microservices sont un ajustement parfait, parce que GraphQL masque le fait que vous avez un microservice architecture des clients. À partir d'un backend point de vue, vous voulez couper le tout en microservices, mais à partir d'un frontend point de vue, vous voulez que tous vos données à partir d'une seule API. À l'aide de GraphQL est le meilleur moyen que je connaisse qui permet de faire les deux. Il vous permet de diviser votre backend en microservices, tout en fournissant une API unique pour toutes vos applications, et permettant rejoint à travers des données de différents services.

Si vous ne souhaitez pas utiliser le RESTE de votre microservices, vous pouvez bien entendu chacun d'eux a ses propres GraphQL API, mais vous devriez toujours avoir une passerelle API. La raison pour laquelle les gens utilisent l'API de passerelles est de le rendre plus facile à faire appel microservices des applications de client, non pas parce qu'il s'intègre bien dans les microservices modèle.

56voto

Enayat Rajabi Points 903

Voir l'article ici, qui explique comment et pourquoi l'approche n ° 1 fonctionne mieux. Aussi regarder l'image ci-dessous tiré de l'article que j'ai mentionné: enter image description here

L'un des principaux avantages d'avoir tout sous un seul et même point de terminaison est que les données peuvent être acheminées de manière plus efficace que si chaque demande a son propre service. Alors que c'est souvent vanté la valeur de GraphQL, une réduction de la complexité et de service de fluage, la résultante de la structure de données permet également la propriété des données extrêmement bien défini et clairement délimitées.

Un autre avantage de l'adoption de GraphQL est le fait que vous pouvez fondamentalement affirmer davantage de contrôle sur le chargement des données. Parce que le processus pour les données chargeurs va dans son propre point de terminaison, vous pouvez honorer la demande partiellement, totalement ou avec des réserves, et donc de contrôle dans une très granulaire manière dont les données sont transférées.

L'article suivant explique ces deux avantages, avec d'autres, très bien: https://nordicapis.com/7-unique-benefits-of-using-graphql-in-microservices/

7voto

HFX Points 130

Pour l'approche n ° 2, en fait c'est la manière que j'ai choisi, parce que c'est beaucoup plus facile que de maintenir les fenêtres de la passerelle API manuellement. Avec cette façon, vous pouvez développer vos services de façon indépendante. Rendre la vie beaucoup plus facile :P

Il ya quelques grands outils de combiner les schémas en un seul, par exemple graphql-weaver et apollon graphql-outils, je suis à l'aide d' graphql-weaver, il est facile à utiliser et fonctionne très bien.

-3voto

Comme microservice l'architecture n'a pas une définition correcte, il n'y a pas de modèle spécifique pour ce style, mais, la plupart d'entre eux viennent avec quelques caractéristiques importantes.En cas de microservices architecture, chaque service peut être décomposé en petits composants, qui peuvent être individuellement adaptés et déployé sans affecter l'intégrité de l'application. Cela signifie que vous pouvez simplement modifier quelques-uns des services sans passer pour l'application de redéploiement à travers personnalisé microservices développement d'une application.

-7voto

Giap Nguyen Points 266

Pour en savoir plus sur les microservices, je pense que GraphQL pourrait également fonctionner parfaitement dans une architecture sans serveur. Je n'utilise pas GraphQL mais j'ai mon propre projet similaire . Je l'utilise comme un agrégateur qui appelle et concentre de nombreuses fonctions en un seul résultat. Je pense que vous pourriez appliquer le même modèle pour GraphQL.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X