HOW - BFF 服务实践系列(一)

news2024/10/6 18:22:13

目录

  • 一、BFF 介绍
    • 1.1 BFF 的概念
    • 1.2 为什么需要 BFF
    • 1.3 举例说明
  • 二、适用于Web前端的BFF应该提供哪些能力
    • 2.1 接口聚合(重要)
    • 2.2 简化和优化的API
    • 2.3 安全和身份验证(重要)
    • 2.4 缓存机制
    • 2.5 错误处理和重试机制
    • 2.6 数据格式转换
    • 2.7 日志记录和监控(重要)
    • 2.8 安全策略实施
    • 2.9 API 版本管理
    • 2.10 性能优化
    • 2.11 配置管理
    • 实例举例

一、BFF 介绍

BFF 是“Backend for Frontend”的缩写,即服务于前端的后端,是一种软件架构模式,专门为前端应用(如Web应用或移动应用)提供后端服务,或者说是为了让后端 API 满足不同的前端使用场景而演进出来的一种模式。

这种模式由Sam Newman在他的书《Building Microservices》中首次提出,旨在解决前端应用和后端服务之间的特定需求和问题。

1.1 BFF 的概念

BFF 是一个专门为单个前端应用或一组前端应用定制的后端服务。这意味着每个前端应用(或一组类似的前端应用)可以有自己独特的后端服务,这个服务可以专注于满足该应用的具体需求。

BFF 的主要职责包括:

  1. 聚合数据:从多个后端服务获取数据并整合,以便前端能够一次性获取所有需要的信息。
  2. 简化接口:为前端应用提供简化和优化的API,减少前端处理复杂业务逻辑的需求。
  3. 适配前端需求:根据不同前端应用的需求,提供特定的接口和功能。例如,移动应用和Web应用可能需要不同的数据格式或响应时间。
  4. 安全性和验证:在前端和后端服务之间添加一层额外的安全和身份验证机制。

1.2 为什么需要 BFF

在我们日常的业务开发中,后端同学在定义微服务接口时,为了保证接口的通用性,往往不希望把接口设计为专门供某个页面或系统使用。

例如,Web、APP、小程序都需要展示用户的订单x信息,但移动端希望显示订单基本信息,Web端希望显示订单信息和用户信息,APP希望显示订单信息和推荐数据。这时候如果后端提供一个接口同时服务于三端,有可能会造成用户个人信息泄漏,多余的信息也会造成数据冗余或拖慢响应。同时,这个后端接口在后端微服务侧,其实可能需要对接其他微服务才能得到完整的数据,有一定的强耦合。

因此,更好的方案应该是在微服务之上,构建一个或多个新的服务,由这些服务组装数据,提供最终的接口给前端同学使用。

另外,各个系统也都需要接入SSO,需要处理接口鉴权,这些都可以通过一个BFF来统一提供支持。

请添加图片描述
具体来说:

  1. 前端需求多样化:不同类型的前端应用(如Web、iOS、Android)通常有不同的数据和功能需求。BFF 可以为每个前端定制服务,提供最合适的接口和数据格式。
  2. 降低前端复杂度:通过在BFF层处理业务逻辑和数据聚合,可以简化前端代码,使其更加专注于UI和用户体验。
  3. 优化性能:BFF 可以通过减少网络请求、批量处理数据和缓存机制来提升前端应用的性能。
  4. 解耦前后端开发:前端和后端可以独立开发和部署。BFF 作为中间层,可以更容易地适应后端服务的变化,而无需频繁修改前端代码。
  5. 安全性增强:BFF 可以集中管理和实施安全策略,如身份验证、授权和日志记录,提升整体系统的安全性。

1.3 举例说明

假设一个电子商务平台有Web应用和移动应用两种前端,每个前端都有不同的需求。通过引入BFF,可以为Web应用和移动应用分别创建两个BFF:

  • Web BFF:为Web应用提供优化的API接口,可能需要较为详细的产品信息、用户评论等。
  • Mobile BFF:为移动应用提供轻量级的API接口,可能需要简化的数据格式、更快的响应时间,以及更少的网络流量消耗。

通过这种方式,前端应用和后端服务之间的通信更加高效,并且每个前端应用的开发团队可以更加专注于自己的领域。

总结来说,BFF 是一种通过定制化后端服务来满足不同前端应用需求的架构模式,能够提升开发效率、优化性能、增强安全性,并简化系统维护。

二、适用于Web前端的BFF应该提供哪些能力

适用于Web前端的BFF(Backend for Frontend)应该提供以下关键能力,以有效满足Web应用的需求:

2.1 接口聚合(重要)

BFF 应该能够从多个后端服务获取数据,并将这些数据整合成单个响应,以减少前端的请求次数和复杂度。

2.2 简化和优化的API

BFF 应该为Web前端提供简化和优化的API接口,屏蔽复杂的后端逻辑,提供易于使用且高效的数据接口。

2.3 安全和身份验证(重要)

BFF 应该具备身份验证和授权功能,确保只有经过授权的用户才能访问特定资源。此外,还应提供保护敏感数据的措施,如数据加密和防护机制。

2.4 缓存机制

为了提升性能,BFF 应该实现有效的缓存机制,缓存常用数据以减少后端请求次数和响应时间。

2.5 错误处理和重试机制

BFF 应该具备健壮的错误处理机制,能够处理后端服务故障或网络问题,并根据需要进行重试或提供降级服务。

2.6 数据格式转换

BFF 应该能够根据Web前端的需求,对数据格式进行转换。例如,将后端返回的XML数据转换为前端需要的JSON格式。

2.7 日志记录和监控(重要)

BFF 应该提供详细的日志记录和监控功能,以便开发和运维团队可以追踪请求、检测问题并进行性能分析。

2.8 安全策略实施

BFF 应该能够实施各种安全策略,包括防止跨站请求伪造(CSRF)、跨站脚本攻击(XSS)等安全威胁。

2.9 API 版本管理

BFF 应该支持API版本管理,以便在后端服务升级或更改时,能够同时支持多个版本的API,确保前端应用的兼容性。

2.10 性能优化

BFF 应该致力于性能优化,包括数据压缩、减少冗余数据传输、批量请求处理等,提高Web前端的响应速度。

2.11 配置管理

BFF 应该支持灵活的配置管理,能够根据不同的环境(如开发、测试、生产)进行配置调整,确保各环境下的服务一致性和稳定性。

实例举例

假设一个电商网站的Web前端需要展示用户订单历史和推荐产品信息,BFF可以提供以下能力:

  • 数据聚合:从订单服务和推荐服务获取数据,整合成单个响应。
  • 简化API:提供一个简单的API端点,例如 /user/dashboard,返回所需的所有数据。
  • 安全性:在访问数据前进行用户身份验证,确保只有登录用户才能查看订单信息。
  • 缓存:缓存用户订单历史以减少频繁访问后端服务。
  • 错误处理:如果推荐服务不可用,提供降级服务,返回默认推荐产品列表。
  • 数据转换:将订单服务返回的内部数据格式转换为Web前端易于处理的JSON格式。
  • 日志和监控:记录每个请求的详细信息,并监控BFF的性能和可用性。

通过这些能力,BFF不仅能提高Web前端的开发效率,还能确保系统的性能和安全性,使用户体验更加流畅和可靠。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1718377.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nvidia Orin/Jetson +GMSL/RLINC/VbyOne/FPDLink 同轴AI多相机同步车载视觉解决方案

在本次演讲中,介绍了多相机同步技术在自主机器中的应用情况,围绕无人配送小车、控制器视觉传感器方案升级、人形机器人三个典型案例中如何为客户提供高效的多相机同步解决方案进行了详细的讲解,并进一步介绍如何通过创新的多相机同步技术&…

掌控未来,爱普生SR3225SAA用于汽车钥匙、射频电路的智慧引擎

为了响应市场需求,Epson使用独家QMEMS*2技术所生产的石英振荡器,与其精巧的半导体技术所制造的射频传输器电路,开发了SR3225SAA。不仅内建的石英震荡器之频率误差仅有2 ppm,更使其封装尺寸达仅3.2 mm x 2.5 mm,为客户大…

Maven简介和快速入门

1.1Maven介绍 Maven – Introduction (apache.org) Maven就是一个软件,掌握软件安装、配置、以及基本功能(项目构建、依赖管理)。 1.2Maven主要作用 1.依赖管理: Maven 可以管理项目的依赖,包括自动下载所需依赖库、…

Aigtek功率放大器的主要性能要求有哪些

功率放大器是电子系统中的重要组件,用于将低功率信号放大到高功率水平。功率放大器的性能直接影响到信号的放大质量和系统的整体性能。下面西安安泰将介绍功率放大器的主要性能要求。 增益:功率放大器应当具有足够的增益,即将输入信号的幅度放…

机器人控制系列教程之D-H参数建模法

机器人运动学的研究依赖于机器人的模型的建立,目前较为多见的两种方法分别是Denavit-Hartenberg建模法(简称:D-H建模法)。该方法时由Denavit和Hartenberg于19955年提出的一种为关节链中的每一个杆件建立一个坐标系的矩阵方法&…

VIO System 丨适用于控制器开发前期的测试系统

VIO综述 嵌入式软件的HIL测试需要复杂的测试系统及完整的ECU硬件,这导致通常只能在开发流程的后期阶段进行测试。全新推出的低成本解决方案VIO System,使得在开发前期不仅可以进行总线通讯测试,也可以同时进行I/O信号测试。 该系统旨在通过…

产品上市新闻稿怎么写?纯干货

一个产品的上市,想要达到一个非常好的宣传效果,前期的预热造势是必不可少的,投放产品上市新闻稿到权威专业的媒体,潜移默化去影响用户的心智,产品上市新闻稿怎么写?接下来伯乐网络传媒就来给大家分享一下&a…

MFC 解决Enter回车键和Esc取消键默认关闭窗口的三种方法

文章目录 问题描述问题原因解决办法方法一:在重载的PreTranslateMessage 函数中屏蔽回车和ESC 的消息方法二:重载OnOK函数方法三:将所有按钮类型设为普通按钮,并设置其中一个按钮为默认按钮 问题描述 一般情况下编写的MFC对话框程…

8086 汇编笔记(三):第一个程序

一、一个源程序从写出到执行的过程 第一步:编写汇编源程序 第二步:对源程序进行编译连接 第三步:执行可执行文件中的程序 二、源程序 codesg segment ; 定义一个段,段的名称为“codesg”,这个段从此开始…

day25-XML

1.xml 1.1概述【理解】 万维网联盟(W3C) 万维网联盟(W3C)创建于1994年,又称W3C理事会。1994年10月在麻省理工学院计算机科学实验室成立。 建立者: Tim Berners-Lee (蒂姆伯纳斯李)。 是Web技术领域最具权威和影响力的国际中立性技术标准机构。 到目前为…

散射技术在AI去衣中的作用及其伦理考量

引言: 在人工智能的众多应用领域中,图像处理一直是一个热门话题。近年来,随着深度学习技术的飞速发展,AI去衣功能引起了广泛的关注和讨论。这项技术的核心在于利用先进的算法对图像进行处理,以实现从图片或视频中移除衣…

java家政上门系统源码,一套同城预约、上门服务的家政系统源码

一款同城预约、上门服务的家政系统源码,用户端、服务端、管理端各端相互依赖又相互独立,支持选择项目、选择服务人员的下单方式,支持多城市并且设置每个城市专属服务项目。 技术架构:java1.8springboot mysql htmlThymeleaf uni…

Spring Cloud Alibaba-09-Seata分布式事务

Lison <dreamlison163.com>, v1.0.0, 2024.5.03 Spring Cloud Alibaba-09-Seata分布式事务 文章目录 Spring Cloud Alibaba-09-Seata分布式事务分布式事务基础事务本地事务分布式事务分布式事务的场景 分布式事务的解决方案全局事务可靠消息服务最大努力通知TCC事务 Se…

【C++】vector和list的迭代器

目录 前言 一.迭代器的使用 1.vector迭代器 2.list迭代器的使用 二.迭代器失效问题 1.vector迭代器失效问题 2.list迭代器失效问题 三.vector和list的对比 前言 我们在学习CSTL部分的时候&#xff0c;在vector和list的部分初步认识了迭代器&#xff0c;以及在初学阶段…

autocad背景色、引线文字大小

一、改变背景 在命令行输入op&#xff0c;回车&#xff0c;弹出配置对话框&#xff1a; 二、改变引线文字大小 选中引线&#xff0c;右键选择【特性】&#xff0c;在文字选项卡中设置文字高度&#xff1a;

小程序项目创建与Vant-UI引入

一&#xff0c;创建小程序项目 AppID可先用测试号&#xff1b; 模板来源选择 ’全部来源‘ &#xff0c;’基础‘ 。模板一定JS开头的&#xff1b; vant-weapp 官网 vant-Weapp 二&#xff0c;下载vant-weapp 组件 1&#xff0c;在新项目中打开 ’调试器‘&#xff1b; 2…

2024年人工智能与机械自动化技术国际会议( ICAIMAT 2024)

2024年人工智能与机械自动化技术国际会议( ICAIMAT 2024) 会议简介 随着科技的飞速发展&#xff0c;人工智能和机械化自动化技术已成为全球产业升级和经济发展的重要动力。为了进一步促进国际交流与合作&#xff0c;推动人工智能和机械化自动化技术的创新与应用&#xff0c;我…

【IDEA】-使用IDEA查看类之间的依赖关系

1、父子类的继承、实现关系 1.1、使用CTRL Alt U 选择 java class 依据光标实际指向的类位置 用实心箭头表示泛化关系 是一种继承的关系&#xff0c;指向父类 可以提前设置需要显示的类的属性、方法等信息 快捷键 Ctrl Alt S &#xff0c;然后搜索 Diagrams 1.2、使用…

java期末突击

目录 1. 快速入门 2. 类 3. 成员方法 4. 构造器 5. 单例模式 6. 继承 7. 抽象类 8. 多线程&#xff08;Thread与Runnable&#xff09; 1. 快速入门 public class Hello {public static void main(String[] args){System.out.println("Hello,World&q…

对象转为Map

方案一&#xff0c;Jackson String json objectMapperFace.writeValueAsString(contract);Map<String,Object> map objectMapperFace.readValue(json, Map.class);方案二 &#xff0c; apache BeanUtils Map<String,String> beanMap null;try {beanMap BeanUti…