Interface de interface do usuário de microsserviços com renderização no lado do servidor Java e ReactJS

Meu projeto atual é que os clientes se conectem ao meu Gateway de API da Web (Java) usando um navegador, o Gateway da API da Web chamará cada microsserviço (Java) para obter seus dados JSON e retorná-los ao componente de interface do usuário que fez a solicitação no cliente .

A única renderização do lado do cliente será de cada componente da interface do usuário do ReactJS para solicitações recorrentes ao gateway.

No lado do servidor, a visualização HTML completa será renderizada antes de ser enviada de volta ao cliente.

Client browser

     ▼ (Request Dashboard View)

Web API Gateway

     ▼ (Request microservice JSON data)

Microservice A JSON Data
Microservice B JSON Data
Microservice C JSON Data
Microservice D JSON Data

     ▼ (Return JSON Data to gateway)

Web API Gateway

     ▼ (Render HTML and return to Client)

Client browser

     ▼ (ReactJS UI Components request data from API Gateway)

É aqui que não fica claro. Seria melhor que cada componente da interface do usuário se comunicasse com o Web API Gateway ou o Microservice pai de origem para obter dados?

Considerações

Ter os componentes da interface do usuário conversando com o Web API Gateway parece razoável, mas associará os microsserviços ao gateway, ou seja, expor uma nova API no microsserviço, o gateway também precisará ser atualizado.Fazer com que os componentes da interface do usuário conversem diretamente com o Microservice para obter dados, remove a necessidade de também atualizar o Web API Gateway, mantendo-os menos acoplados. Mas isso expõe o Microservice a chamadas externas do navegador do cliente.

Decisões de Design

Ter os componentes da interface do usuário nos gateways da API cria um monólito da interface do usuário, em vez de ter cada microsserviço responsável por seu próprio componente da interface do usuário. O uso da abordagem monolítica simplifica a solução e também evita as complexidades de ter que agregar cada componente da interface do usuário de microsserviços quando o cliente solicita uma visualização específica.

Ferramentas:

JavaNashornDropwizardReactJSGradleWebpackNodeJSNPM

Como agregar vários componentes da interface do usuário do microsserviço no Gateway de API da Web usando Java e ReactJS e depois fornecer esses dados HTML pré-renderizados junto com o aplicativo JavaScript para o cliente?

Referências úteis:

Renderização do lado do servidor com Java 8 e Nashhornhttp://winterbe.com/posts/2015/02/16/isomorphic-react-webapps-on-the-jvm/

questionAnswers(2)

yourAnswerToTheQuestion