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

目录

  • 一、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前端的开发效率,还能确保系统的性能和安全性,使用户体验更加流畅和可靠。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(ISPRS,2023)RS-CLIP: 基于对比视觉-语言监督的zero-shot遥感场景分类

文章目录 相关资料摘要引言方法CLIP回顾伪标签生成课程学习策略 实验数据集不同文本提示失败案例分析课程学习zero-shot分类 相关资料 论文:RS-CLIP: Zero shot remote sensing scene classification via contrastive vision-language supervision 摘要 零样本遥…

未来已来:Spring Boot引领数据库智能化革命

深入探讨了Spring Boot如何与现代数据库技术相结合,预测并塑造未来的数据访问趋势。本书不仅涵盖了Spring Data JPA的使用技巧,还介绍了云原生数据库的概念,微服务架构下的数据访问策略,以及AI在数据访问层的创新应用。旨在帮助开…

视频搬运的素材网站有哪些?打包好的视频素材在哪找?

短视频创作的朋友们,欢迎进入这个充满创意的世界!如果你曾为找不到合适的素材而苦恼,那么今天就让我为你介绍几个能够快速丰富你视频内容的素材平台。无论是为了搬运视频还是寻找灵感,下面这些网站都将是你的强力助手。特别地&…

lammps金刚石三棱锥刀具建模

大家好,我是小马老师。 本文介绍lammps三棱锥刀具建模方法。 lammps切削模拟的刀具形状有很多,如球形、锐角、钝角、三棱锥等刀具。 球形、锐角、钝角等刀具建模已经在公众号发过,本文介绍三棱锥的建模。 形状如下图所示: 主要原…

探索 Vue Devtools 4.0 的新世界!

大家好,我是前端宝哥。Vue Devtools 4.0 版本带来了一系列激动人心的新特性和改进,让我们一起来探索这些更新亮点! 宝哥省流版: 🛠 直接编辑组件数据,实时预览变更效果。⚙️ 快速编辑功能,一键…

使用python实现超市购物系统(一个小例子)

可以增加其他功能,这里就展示一个小的例子~

git基本使用——回退,撤销add,commit,合并分支

学习笔记 笔记中表格中的—— 表示需要回退的地方,也就是使用命令之后会改变的地方 网页软件分享 这是一个非常好用web端笔记画图软件,解决了typora画图不方便的问题

【评价类模型】Topsis

综合赋权法:Topsis法: 主要适用情况:题目提供了足够的评价指标和数据,数据已知,评价指标的类型差异较大 基本思想:将所有方案与理想解和夫理想解进行比较,通过激素那方案与这两个解的举例去欸的…

mysql面试之分库分表总结

文章目录 1.为什么要分库分表2.分库分表有哪些中间件,不同的中间件都有什么优点和缺点?3.分库分表的方式(水平分库,垂直分库,水平分表,垂直分表)3.1 水平分库3.2 垂直分库3.3 水平分表3.4 垂直分表 4.分库分表带来的问题4.1 事务一致性问题4.2 跨节点关联…

pandas添加行

方法1(df.append()) import pandas as pd# 创建一个空的DataFrame df pd.DataFrame(columns[Column1, Column2])# 新增一行数据 data {Column1: Value1, Column2: Value2} df df.append(data, ignore_indexTrue) print(df)raw_data {"Column1":"adafafa&quo…

【recast-navigation-js】使用three.js辅助绘制Agent

目录 说在前面使用Tweakpane添加CrowAgent其他 说在前面 操作系统&#xff1a;windows 11浏览器&#xff1a;edge版本 124.0.2478.97recast-navigation-js版本&#xff1a;0.29.0golang版本&#xff1a;1.21.5 使用Tweakpane fps面板interface FPSGraph extends BladeApi<B…

Redis这一篇就够了

一.概述 Redis是什么&#xff1f; Redis是远程服务字典服务&#xff0c;是一个开源的使用ANSI C语言编写&#xff0c;支持网络&#xff0c;可基于内存亦可持久化的日志型&#xff0c;Key-Value数据库&#xff0c;并提供多种语言的API。 redis会周期性把更新的数据写入磁盘或把…

米尔MYC-Y6ULX-V2开发板测评记录

文章目录 1、板子上手体验2、板载硬件3、系统信息4、 驱动测试5、编译linux三大件7、摄像头测试9、总结 1、板子上手体验 首先非常感谢芯查查给了这样一个机会来测评这样一款性能十分强大的开发板&#xff0c;我拿到手的是MYC-Y6ULX-V2核心板及开发板&#xff0c;这块板子具有…

SSMP整合案例第六步 在前端页面上利用axios和element-ui与后端交互实现增删改

新增操作 正常我们都是从新增功能书写 查看源码 显示的是这个 在vue里面开下来 这样就能显示 点击确定 就能把数据发送到后台进行保存 //弹出添加窗口handleCreate() {this.dialogFormVisible true;},//重置表单resetForm() {},//添加handleAdd() {//绑定的是确定按钮 发起请…

IDM优势

目录 &#x1f40b;引言 &#x1f40b;IDM的核心优势 &#x1f988;下载速度提升 &#x1f41f;技术原理&#xff1a; &#x1f41f;对比示例&#xff1a; &#x1f988;断点续传 &#x1f41f;技术原理&#xff1a; &#x1f41f;对比示例&#xff1a; &#x1f988;集…

牛客热题:缺失的第一个正整数

牛客热题&#xff1a;数组中出现一次的两个数字> &#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 …

如何使用golang自带工具对代码进行覆盖率测试

在 Go 语言中&#xff0c;测试代码覆盖率通常使用 go test 命令结合 -cover 和 -coverprofile 1. 基本代码覆盖率报告 在项目目录下运行以下命令 go test -cover这将在控制台输出一个代码覆盖率的百分比。但是&#xff0c;这种方式不会保存覆盖率数据&#xff08;可以指定目…

961操作系统知识总结

部分图片可能无法显示&#xff0c;参考这里&#xff1a;https://zhuanlan.zhihu.com/p/701247894 961操作系统知识总结 一 操作系统概述 1. 操作系统的基本概念 重要操作系统类型&#xff1a;批处理操作系统(批量处理作业&#xff0c;单道批处理/多道批处理系统&#xff0c;用…

将 py 文件编译成 pyd 文件

文章目录 一、简介1.1、Python中的文件类型&#xff1a;.py .pyc .pyd1.2、基本原理1.2.1、函数详解&#xff1a;Extension() —— 用于定义扩展模块&#xff08;C/C 扩展&#xff09;的类1.2.2、函数详解&#xff1a;setup() —— 用于配置和构建包的函数 二、构建过程2.0、…

带交互的卡尔曼滤滤波|一维滤波|源代码

背景 一维卡尔曼滤波的MATLAB例程&#xff0c;​背景为温度估计。 代码介绍 运行程序后&#xff0c;可以自己输入温度真实值&#xff1a; 以20℃为例&#xff0c;得到如下的估计值​&#xff1a; 滤波前的值和滤波后的值分别于期望值&#xff08;真实值&#xff09;作差…