He estado trabajando con GraphQL y microservicios
Según mi experiencia, lo que funciona para mí es una combinación de ambos enfoques, dependiendo de la funcionalidad / uso, nunca tendré una sola puerta de enlace como en el enfoque 1 ... pero no un gráfico por cada microservicio como enfoque 2.
Por ejemplo, basado en la imagen de la respuesta de Enayat, lo que haría en este caso es tener 3 puertas de enlace de gráficos (no 5 como en la imagen)
Aplicación (producto, cesta, envío, inventario, necesario / vinculado a otros servicios)
Pago
Usuario
De esta manera, debe prestar especial atención al diseño de los datos mínimos necesarios / vinculados expuestos de los servicios dependientes, como un token de autenticación, ID de usuario, ID de pago, estado de pago
En mi experiencia, por ejemplo, tengo la puerta de enlace "Usuario", en ese GraphQL tengo las consultas / mutaciones del usuario, iniciar sesión, iniciar sesión, cerrar sesión, cambiar contraseña, recuperar correo electrónico, confirmar correo electrónico, borrar cuenta, editar perfil, cargar imagen , etc ... este gráfico por sí solo es bastante grande !, está separado porque al final los otros servicios / puertas de enlace solo se preocupan por la información resultante, como ID de usuario, nombre o token.
De esta manera es más fácil ...
Escale / apague los diferentes nodos de puertas de enlace en función de su uso. (por ejemplo, es posible que las personas no siempre estén editando su perfil o pagando ... pero la búsqueda de productos podría usarse con más frecuencia).
Una vez que las puertas de enlace maduran, crecen, se conoce su uso o tiene más experiencia en el dominio, puede identificar cuáles son la parte del esquema que podría tener su propia puerta de enlace (... me ocurrió con un gran esquema que interactúa con los repositorios git , Separé la puerta de enlace que interactúa con un repositorio y vi que la única entrada necesaria / información vinculada era ... la ruta de la carpeta y la rama esperada)
La historia de sus repositorios es más clara y puede tener un repositorio / desarrollador / equipo dedicado a una puerta de enlace y sus microservicios involucrados.
ACTUALIZAR:
Tengo un clúster de kubernetes en línea que usa el mismo enfoque que describo aquí con todos los backends que usan GraphQL, todos de código abierto, aquí está el repositorio principal:
https://github.com/vicjicaman/microservice-realm
Esta es una actualización de mi respuesta porque creo que es mejor si la respuesta / enfoque está respaldado por un código que se está ejecutando y puede consultarse / revisarse, espero que esto ayude.