Pracowałem z GraphQL i mikroserwisami
Opierając się na moim doświadczeniu, to, co działa dla mnie, to połączenie obu podejść w zależności od funkcjonalności / zastosowania, nigdy nie będę miał pojedynczej bramy, jak w podejściu 1 ... ale poniżej wykresu Graphql dla każdej mikrousługi jako podejścia 2.
Na przykład na podstawie obrazu odpowiedzi z Enayat, co bym zrobił w tym przypadku to mieć 3 bramki grafowe (nie 5 jak na obrazku)
Aplikacja (produkt, koszyk, wysyłka, zapasy, potrzebne / połączone z innymi usługami)
Zapłata
Użytkownik
W ten sposób musisz zwrócić szczególną uwagę na projekt niezbędnych / połączonych minimalnych danych ujawnionych z zależnych usług, takich jak token autoryzacji, identyfikator użytkownika, identyfikator płatności, status płatności.
Na przykład z mojego doświadczenia wynika, że mam bramę "Użytkownik", w której GraphQL mam zapytania / mutacje użytkownika, logowanie, logowanie, wylogowanie, zmianę hasła, odzyskanie adresu e-mail, potwierdzenie adresu e-mail, usunięcie konta, edycję profilu, załadowanie zdjęcia , itd ... ten wykres sam w sobie jest dość duży !, jest oddzielony, ponieważ na końcu inne usługi / bramy dbają tylko o wynikowe informacje, takie jak identyfikator użytkownika, nazwa lub token.
W ten sposób łatwiej ...
Skaluj / wyłączaj różne węzły bram w zależności od ich użycia. (na przykład ludzie nie zawsze edytują swój profil lub płacą ... ale wyszukiwanie produktów może być używane częściej).
Gdy brama dojrzeje, rozrosnie się, zostanie rozpoznane użycie lub będziesz miał więcej wiedzy na temat domeny, możesz zidentyfikować, która część schematu może mieć własną bramę (... zdarzyło mi się z ogromnym schematem, który współdziała z repozytoriami git , Oddzieliłem bramę, która współdziała z repozytorium i zobaczyłem, że jedyne potrzebne / połączone informacje to ... ścieżka folderu i oczekiwana gałąź)
Historia twoich repozytoriów jest bardziej przejrzysta i możesz mieć repozytorium / programistę / zespół poświęcony bramie i związanym z nią mikrousługom.
AKTUALIZACJA:
Mam klaster kubernetes online, który używa tego samego podejścia, które opisałem tutaj, ze wszystkimi backendami używającymi GraphQL, wszystkie open source, tutaj jest główne repozytorium:
https://github.com/vicjicaman/microservice-realm
To jest aktualizacja mojej odpowiedzi, ponieważ uważam, że lepiej jest, jeśli odpowiedź / podejście zawiera kopię zapasową kodu, który działa i można się z nią zapoznać / przejrzeć, mam nadzieję, że to pomoże.