Grande question ! On dirait que vous vous demandez comment configurer votre architecture pour GraphQL et les microservices, et pourquoi.
Contexte
Je recommanderais d'utiliser GraphQL, car sa meilleure utilisation consiste à consolider les sources de données de manière propre et à exposer toutes ces données via une API standardisée. D'un autre côté, l'un des principaux problèmes liés à l'utilisation de microservices est qu'il est difficile de gérer toutes les fonctions différentes que vous pouvez avoir. Et à mesure que votre application se développe, la consolidation de toutes ces fonctions de microservices devient un problème majeur.
Les avantages de l'utilisation de ces technologies sont considérables puisque vous disposez désormais d'une passerelle API GraphQL qui vous permet d'accéder à vos microservices depuis votre client comme s'il s'agissait d'une seule application monolithique, mais vous bénéficiez également des nombreux avantages de l'utilisation des microservices du point de vue des performances et de l'efficacité.
Architecture
L'architecture que je recommande est donc d'avoir un proxy GraphQL en face de vos microservices et, dans vos résolveurs de requêtes et de mutations GraphQL, d'appeler la fonction dont vous avez besoin pour récupérer les données nécessaires.
Il n'y a pas vraiment de différence entre une passerelle GraphQL devant des microservices GraphQL ou une passerelle GraphQL devant des points d'extrémité REST, même si je dirais qu'il serait plus simple d'exposer les fonctions de vos microservices en tant que points d'extrémité REST puisque chaque fonction ne devrait théoriquement servir qu'un seul objectif. Dans ce cas, vous n'aurez pas besoin des frais généraux et des complexités supplémentaires de GraphQL, car il ne devrait pas y avoir trop de logique relationnelle en arrière-plan.
Si vous cherchez des fournisseurs de microservices, les meilleurs que j'ai vus sont les suivants AWS Lambda , Webtask , Fonctions Azure y Google Cloud Functions . Et vous pouvez utiliser Sans serveur comme moyen de gérer et de déployer ces fonctions de microservices.
Par exemple :
import request from 'request';
// GraphQL resolver to get authors
const resolverMap = {
Query: {
author(obj, args, context, info) {
// GET request to fetch authors from my microservice
return request.get('https://example.com/my-authors-microservice');
},
},
};
Service GraphQL
C'est un sujet que nous avons exploré à l'école. Aiguillage également, au cas où vous souhaiteriez vous appuyer sur un service pour vous aider à gérer ce flux de travail. Nous fournissons d'abord un service de backend GraphQL qui vous aide à vous familiariser avec GraphQL en quelques minutes, puis nous vous permettons d'ajouter vos propres microservices (c'est-à-dire une logique personnalisée) à votre API GraphQL sous la forme d'une composition de fonctions. Il s'agit essentiellement du système de webhook le plus avancé, qui vous offre la flexibilité et le contrôle sur la façon d'appeler vos microservices.
N'hésitez pas à rejoindre également le Rencontre GraphQL sans serveur à SF si vous êtes dans le coin :)
J'espère que cela vous aidera !