Ho lavorato con GraphQL e microservizi
In base alla mia esperienza, ciò che funziona per me è una combinazione di entrambi gli approcci a seconda della funzionalità / utilizzo, non avrò mai un singolo gateway come nell'approccio 1 ... ma non un graphql per ogni microservizio come approccio 2.
Ad esempio, in base all'immagine della risposta di Enayat, in questo caso farei 3 gateway grafici (non 5 come nell'immagine)
App (Prodotto, Carrello, Spedizione, Inventario, necessari / collegati ad altri servizi)
Pagamento
Utente
In questo modo è necessario prestare particolare attenzione alla progettazione dei dati minimi necessari / collegati esposti dai servizi dipendenti, come token di autenticazione, ID utente, ID pagamento, stato di pagamento
Nella mia esperienza, ad esempio, ho il gateway "Utente", in quel GraphQL ho le query / mutazioni dell'utente, login, accesso, disconnessione, modifica password, recupero e-mail, conferma e-mail, cancellazione account, modifica profilo, caricamento foto , ecc ... questo grafico da solo è abbastanza grande !, è separato perché alla fine gli altri servizi / gateway si preoccupano solo delle informazioni risultanti come userid, nome o token.
In questo modo è più facile ...
Ridimensionare / arrestare i diversi nodi gateway a seconda dell'utilizzo. (ad esempio le persone potrebbero non modificare sempre il proprio profilo o pagare ... ma la ricerca dei prodotti potrebbe essere utilizzata più frequentemente).
Una volta che un gateway matura, cresce, si conosce l'utilizzo o si ha più esperienza sul dominio è possibile identificare quali sono le parti dello schema che potrebbero avere il proprio gateway (... mi è successo con un enorme schema che interagisce con i repository git , Ho separato il gateway che interagisce con un repository e ho visto che l'unico input necessario / informazioni collegate era ... il percorso della cartella e il ramo previsto)
La cronologia dei tuoi repository è più chiara e puoi avere un repository / sviluppatore / team dedicato a un gateway e ai suoi microservizi coinvolti.
AGGIORNARE:
Ho un cluster di kubernetes online che sta usando lo stesso approccio che descrivo qui con tutti i backend usando GraphQL, tutti opensource, ecco il repository principale:
https://github.com/vicjicaman/microservice-realm
Questo è un aggiornamento della mia risposta perché penso che sia meglio se il codice di risposta / approccio è sottoposto a backup del codice in esecuzione e può essere consultato / rivisto, spero che questo aiuti.