前端开发模式的演进
- 后端渲染页面: 后端基于模板,结合具体的请求,生成对应的 html 文件给浏览器执行
- 前后端的分离: 后端不再写 HTML,只提供 API 接口返回数据给前端,前端通过 JavaScript 负责界面的渲染和交互,通过 AJAX 异步地和后端交互数据
- 前端的工程化: 前端不再是开发一个个页面,而是开发一个个组件,并且实现开发的模块化,组件化,规范化,出现了如 Node.js,React,Angular,Vue,AMD,CommonJS,ES6,Webpack 等技术
- 后端的微服务: 后端微服务化后,不再是一个单独服务针对前端提供细粒度的接口,而是由多个微服务提供粗粒度的接口,让前端自己筛选数据
后端微服务化后,前端如何从后端获取数据呢
- 通过 CORS 跨域访问多个微服务,获取数据后前端自己裁剪组合
- 通过统一的 API Gateway 访问,由 API Gateway 将请求分发给各个微服务,获取数据后前端自己裁剪组合
- 加一个中间层 BFF (Back-end for Front-end 服务于前端的后端),BFF 的接口设计是专门针对前端设计的,在接受前端的请求后,向各个微服务请求数据,然后组合裁剪,然后将结果返回给前端,前端就可以直接使用
BFF 的优点
- 前后端彻底分离,后端的变化不影响前端,前端的变化也不影响后端,都由 BFF 去适配就可以
- 通常 BFF 由前端团队自己开发,团队更容易使 BFF 接口设计适配前端业务,前端测试也更容易,而以往前后端团队的沟通协作都是很大的成本
- 后端的功能更明确,更独立,就是提供某种粗粒度的数据即可
BFF 的缺点
- 多一个中间层增加延迟
- 前端增加开发成本,以往只要开发前端即可,现在还要考虑后端的 BFF,要考虑 BFF 的高并发,负载均衡,认证等内容