前端中间层(BFF)

中间层的作用

接口聚合

这个是我们比较常用到的功能,目前前端项目会对应后端多个服务,即使是同一业务的后端服务,目前后端的架构也都是为服务设计,所以接口从业务单元出发,可能会比较分散。
如果仅从页面发起请求,可能会发起多个请求,有时候类似于详情页,或者信息量较大的地方可能会达到七八个请求。所以在 node 服务做简单的聚合,会大幅减小前端的请求数,同时减轻前端的业务处理逻辑。

好处:降低请求数,减轻前端业务逻辑压力,接口更加面向前端展现层。
缺点:node 服务逻辑处理,代码排查需要根据 node 日志查看,不能直接从前端报错来判断具体是后端的什么问题。

数据过滤

数据过滤,将后端接口做整体的透传,后端的接口一般会携带比较多的信息,结构也会相对于复杂。
node 层应该有一道过滤规则,将接口需要的信息进行返回,如果结构上不符合前端展示或在前端处理比较复杂,可以进行改造,精简后再返回到客户端。

好处:减小请求大小,精简信息,符合展示逻辑。
缺点:处理过滤逻辑工作量较大。后端接口变动,node 层也同样需要跟进。

权限校验

在 node 服务层进行权限校验,对相关的接口用户及用户权限判断校验。
按理来讲,客户端的权限校验是可以进行相关伪造的,是不可信的。
所以重要的接口,涉及保存,修改,查询重点数据等,都需要在后端进行权限校验拦截。

好处;服务安全性,更加可靠。
缺点:无。

业务逻辑处理

业务逻辑处理和接口聚合,数据过滤有着强相关性。这里如果后端 node 服务端进行改造,那么前端的渲染逻辑就比较轻松,是一个权衡的事儿。

好处:在后端进行逻辑封装,简化展现层业务处理。
缺点:工作量转移的问题。

代理转发

大部分的代理转发都是通过 nginx 去处理的,node 处理可能对权限控制,对加一些逻辑判断更加容易。

好处:隐藏后端服务,统一出口,统一流量控制/权限控制等。
缺点:增加工作量。

接口限流

对外系统,需要考虑对恶意攻击的防御,频繁请求接口的情况。

好处:提高系统安全性
缺点:无

数据缓存

服务层增加缓存层,已提高页面的响应速度,提高系统交互性。但也需要考虑哪些比较适合做缓存,因为平台系统,大量的数据都是需要实时性。

好处:提高系统的易用性,可交互性。
缺点:对实时性无法保证。

服务端渲染