【大咖分享】BFF在千寻定位网前端的落地与演进支持:讲师介绍了来自千寻定位网业务中心的前端技术专家唐兵,前端团队负责团队的电子商务相关业务开发。分发等服务提供前端支持,业务涵盖PC、H5、App、小程序、NodeJS等各种技术场景。以下为唐兵精彩演讲的部分内容:BFF的历史演进过程前端BFF层,我们大概经历了四个阶段:serverAPI:后端直接对外暴露接口给前端开发,进行业务调用,这也是前端开发最常见的暴露方式。internalRest:后端同学在底层服务数据接口的基础上进行业务页面逻辑聚合处理,然后透传给前端进行页面数据渲染。Apoll-Graphql:业务接口聚合结构化、模块化。目前该领域由我们千寻位置网络前端开发同学带队;原子化交付,Apoll-Federation:基于Graphql,拆分支持服务,提供更好的开发体验换言之,强耦合页面展示逻辑开发方式来开发API,开发体验差,令人不安。internalRest可以帮助开发者分层开发,将拼接数据的逻辑从数据的核心模块中剥离出来,进而使端的数据模型可以独立于具体页面的逻辑;这种方式在前后端分离之初确实会大大加快业务发展,但是随着业务的不断发展,很多非业务模型的必要领域很难维护;这是典型的【数据生产者和数据消费者之间的工作边界不明确】Apoll-Graphql为什么选择graphql?Graphql允许前端开发人员自定义数据字段。它提供了一种配置方法来定义和定制数据结构,前端同学不需要写多余的代码graphql就可以很方便的帮助我们实现业务页面的数据聚合。比如我们的商城系统有商城列表、购物车、公告信息等,这里可以使用一个graphql定义接口,获取所有数据,结合graphql对描述数据类型的强制要求,减少接口请求次数,NestJs-Graphql可以非常清晰直观的理解每条数据的具体含义NestJs-Graphql为什么推荐使用NestJs:我们在实际项目开发中发现,在开发服务端时,强类型语言的开发方式对数据更加友好。与Koa相比,NestJs对数据类型的支持更好。另外,NestJs提供了很多通用的模块功能,比如使用Guard进行用户验证,过滤处理数据异常等。Apoll-Federation目前在千寻定位网上。很多业务场景下,前端BFF层程序并不直接对外暴露,而是通过web-gw(网关)分发,再通过网关层。做接口聚合,这样如果某个服务的生产出现错误,仍然可以保证我们其他的服务不受影响。Gateway通过数据schema定义聚合具体的业务数据,可以支持跨项目的schema格式获取。非常方便我们跨项目开发Gateway。除了在项目代码中定义schema结构外,还提供提供了远程推拉的方式来拉取schema结构,但是Apollo官方并没有提供独立部署的方案。我们需要自己开发一套Schema集成系统。千寻定位网也做了一套,比较有个性。更多精彩内容不一样,欢迎关注
