关于使用node做BFF中间层的一点想法

752 阅读3分钟

中间层和中间件的概念是完全不一样的

  1. 中间层
    在传统的BS架构中(broswer + server),中间层是处理信息传递转发。
    官方解释:Middle Tier 应用程序服务器层或者应用服务层,是用户接口或者web客户端与数据库之间的逻辑层(比如代理,转发等)。
  2. 中间件
    中间层是一个web框架的逻辑层,中间件是一个函数或者插件(业务用途)
    官方解释:Middleware 是一个对用户请求进行过滤和预处理的函数,一般不会对客户端进行相应,而是把处理结果传递下去。
    如express和koa2,自身提供http服务,通过中间件扩展路由,验证,异常处理等

中间层的意义:

传统的前后端交互模式在SPA的模式下是不适合的

  1. 前端的代码越来越复杂,庞大
  2. 前后端高度耦合,如后端的各种模版技术
  3. 无法良好的支持跨终端

       使用中间层即可解决当前的这些问题,当然中间层也存在性能问题,可以在后端优化和使用ajax转成同步渲染过程中得到平衡。

使用node作为中间层就是前端在调用后端api,进行数据转发,串联服务,路由设计,控制逻辑,渲染页面,体验优化,实现业务的逻辑处理,运算,分组,包装前端想要的数据,降低沟通成本,降低项目耦合度,实现前后端分离。

     使用node 作为BFF中间层的优势

  1. 跨系统,跨终端均可以重用页面数据校验,逻辑代码,无需因新系统、终端接入重写校验;

  2. 在中间件中只做一次数据校验,避免前后端都需要数据校验,保证数据的有效性同时降低代码的开发量;

  3. 处理数据逻辑,解放了前端既要做页面渲染又要写复杂的业务逻辑,使用开发专注于页面渲染,使用分工更明确,项目协作效率更高,更重要的是快速响应页面使得加载更快(如预加载),用户体验更好,避免长时间白屏。

当然中间层也不是万能的,有收益同时也伴随着风险:

  1. 重复开发:每个终端的变化都要对用的api, 也会用重复开发的问题,增加开发成本
    2. 维护问题:需要维护各种BFF应用,并发的压力集中
    3. 链路问题:流程变复杂,同时走前端,服务端的研发流程,多端发布、相互依赖、导致流程繁琐
    4. 浪费资源:中间层多了,必然会占用一定的计算和空间资源

以上就是我对中间层的一点简单的看法,下期我们聊一聊关于node中间层的具体使用(如 koa2,graphql, grpc 等)。以上如有不对,也欢迎指正。