我的当前设计是让客户端使用浏览器连接到我的(Java)Web API网关,Web API网关将调用每个(Java)微服务来获取它们的JSON数据并将其返回给在客户端上发出请求的UI组件。
仅有的客户端渲染将来自于每个ReactJS UI组件对网关进行重复请求。
在服务器端,完整的HTML视图将在发送回客户端之前呈现。
这里有些不清楚,最好让每个UI组件与Web API网关或其来自的父微服务通信以获取数据?
考虑因素:
- 使UI组件与Web API网关通信似乎是合理的,但会将微服务耦合到网关上,这意味着要在微服务上公开新API,网关也需要更新。 - 让UI组件直接与其微服务通信以获取数据可以消除更新Web API网关的需要,从而使它们之间的耦合更少。但这会将微服务暴露给客户端浏览器的外部调用。
设计决策:
- 在API网关中放置UI组件创建了一个UI单体,而不是让每个微服务负责自己的UI组件。使用单体方法简化了解决方案,并避免了在客户端请求特定视图时必须聚合每个微服务UI组件的复杂性。
工具:
- Java - Nashorn - Dropwizard - ReactJS - Gradle - Webpack - NodeJS - NPM
我应该如何使用Java和ReactJS在Web API网关上聚合多个微服务UI组件,然后将这些预渲染的HTML数据与JavaScript应用程序一起提供给客户端?
有用的参考资料: - 使用Java 8和Nashhorn进行服务器端渲染 http://winterbe.com/posts/2015/02/16/isomorphic-react-webapps-on-the-jvm/
仅有的客户端渲染将来自于每个ReactJS UI组件对网关进行重复请求。
在服务器端,完整的HTML视图将在发送回客户端之前呈现。
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)
这里有些不清楚,最好让每个UI组件与Web API网关或其来自的父微服务通信以获取数据?
考虑因素:
- 使UI组件与Web API网关通信似乎是合理的,但会将微服务耦合到网关上,这意味着要在微服务上公开新API,网关也需要更新。 - 让UI组件直接与其微服务通信以获取数据可以消除更新Web API网关的需要,从而使它们之间的耦合更少。但这会将微服务暴露给客户端浏览器的外部调用。
设计决策:
- 在API网关中放置UI组件创建了一个UI单体,而不是让每个微服务负责自己的UI组件。使用单体方法简化了解决方案,并避免了在客户端请求特定视图时必须聚合每个微服务UI组件的复杂性。
工具:
- Java - Nashorn - Dropwizard - ReactJS - Gradle - Webpack - NodeJS - NPM
我应该如何使用Java和ReactJS在Web API网关上聚合多个微服务UI组件,然后将这些预渲染的HTML数据与JavaScript应用程序一起提供给客户端?
有用的参考资料: - 使用Java 8和Nashhorn进行服务器端渲染 http://winterbe.com/posts/2015/02/16/isomorphic-react-webapps-on-the-jvm/