后端架构模式之-BFF(Backend-For-Frontend)

Backend-for-Frontend(BFF) 的概念与意义

1. 什么是 Backend-for-Frontend(BFF)?

Backend-for-Frontend(简称 BFF)是一种后端架构模式,它为特定的前端应用(Web、移动端、桌面端等)提供专门的后端服务,作为前端与通用后端(或微服务)之间的中间层。

在传统架构中,前端通常直接与一个通用的后端 API(如 RESTful 或 GraphQL API)交互,而 BFF 引入了一层专门的后端,让不同类型的前端(Web、iOS、Android、小程序等)有各自独立的 BFF 层。


2. 为什么需要 BFF 层?(BFF 的意义)

BFF 主要用于优化前端和后端的交互,解决以下问题:

(1)不同前端的需求不同
  • Web、移动端、智能设备等不同的前端通常有不同的数据需求,比如:
    • Web 端可能需要加载完整的数据列表。
    • 移动端可能只需要部分关键数据,减少带宽消耗。
    • 小程序可能需要更高效的接口设计,减少 API 调用次数。
  • 如果所有前端都直接调用同一个后端 API,可能会导致前端获取了过多过少的数据,影响性能和用户体验。
  • BFF 层可以根据不同前端的需求,定制化数据格式,减少前端的额外处理。
(2)减少前端的 API 组合逻辑
  • 在没有 BFF 的架构下,前端可能需要多次调用后端 API,然后在前端进行数据合并和转换。
  • BFF 层可以封装多个 API 调用,把复杂的业务逻辑放到后端处理,前端只需要调用一个更简单、更直观的 API
(3)提升安全性
  • 直接让前端访问后端微服务可能暴露太多细节,而 BFF 层可以充当“网关”:
    • 统一进行身份认证、权限控制
    • 避免前端直接暴露数据库结构或业务逻辑,增强安全性。
(4)降低后端改动对前端的影响
  • 如果前端直接依赖通用后端 API,一旦后端改动(比如字段变更、API 结构调整),前端也必须修改。
  • BFF 层可以作为适配层,确保前端的 API 结构保持稳定,即使后端发生变更,BFF 也可以进行转换,减少对前端的影响。

3. BFF 的架构示意
[前端应用]
   │
   ├── Web 前端 ——> [BFF for Web] ——> [后端服务]
   │
   ├── iOS App ——> [BFF for iOS] ——> [后端服务]
   │
   ├── Android App ——> [BFF for Android] ——> [后端服务]
   │
   ├── 小程序 ——> [BFF for 小程序] ——> [后端服务]
  • 每个前端应用都有专门的 BFF 层,BFF 层向后端请求数据,并根据前端需求优化数据结构,然后返回给前端。

4. BFF 的实际应用场景
  • 电商系统
    • PC 端需要展示完整商品列表,而移动端只需要部分简要信息,BFF 层可以针对不同终端返回不同的数据格式。
  • 社交应用
    • Web 端可能支持复杂的好友推荐算法,而移动端可能只需要快速获取好友列表,BFF 层可以根据终端优化 API 调用方式。
  • 企业级应用
    • 一个 SaaS 系统可能有 Web 端、移动端、管理员端等不同用户角色,每个角色需要的数据结构不同,BFF 层可以进行适配。

5. BFF 的技术选型

BFF 层通常使用轻量级的后端框架,以便快速开发、扩展和维护:

  • Node.js(Express, NestJS):适用于 JavaScript/TypeScript 技术栈的前端团队。
  • Python(Flask, FastAPI):适用于 Python 生态的团队,特别是数据处理密集型应用。
  • Go(Gin, Echo):适用于高并发、低延迟的应用。
  • Java(Spring Boot):适用于大型企业系统,与微服务结合紧密。

6. 总结

BFF 是一种后端架构模式,位于前端与后端服务之间,为不同前端提供定制化 API,以优化数据传输、减少 API 调用次数、提升前端开发效率,并降低后端改动对前端的影响。

适用于: ✅ 需要支持多个前端(Web、移动端、小程序等)。
✅ 需要优化前端 API,减少前端数据处理逻辑。
✅ 需要增强安全性,避免前端直接暴露后端 API。
✅ 需要降低后端变更对前端的影响。

在现代 Web 系统开发中,BFF 已成为前后端分离架构的重要组成部分。

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

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

相关文章

python网络爬虫开发实战之基本库使用

目录 第二章 基本库的使用 2.1 urllib的使用 1 发送请求 2 处理异常 3 解析链接 4 分析Robots协议 2.2 requests的使用 1 准备工作 2 实例引入 3 GET请求 4 POST请求 5 响应 6 高级用法 2.3 正则表达式 1 实例引入 2 match 3 search 4 findall 5 sub 6 com…

pytest框架 核心知识的系统复习

1. pytest 介绍 是什么:Python 最流行的单元测试框架之一,支持复杂的功能测试和插件扩展。 优点: 语法简洁(用 assert 替代 self.assertEqual)。 自动发现测试用例。 丰富的插件生态(如失败重试、并发执…

Java 大视界 -- Java 大数据在智慧交通信号灯智能控制中的应用(116)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

Electron桌面应用开发:自定义菜单

完成初始应用的创建Electron桌面应用开发:创建应用,随后我们就可以自定义软件的菜单了。菜单可以帮助用户快速找到和执行命令,而不需要记住复杂的快捷键,通过将相关功能组织在一起,用户可以更容易地发现和使用应用程序…

探索低空,旅游景区无人机应用技术详解

在低空领域,无人机技术在旅游景区中的应用已经日益广泛,为旅游业带来了前所未有的变革。以下是对旅游景区无人机应用技术的详细解析: 一、无人机景区巡检系统 1. 高清拍摄与实时监控:无人机搭载高清摄像头,能够对景区…

Python-07PDF转Word

2025-03-04-PDF转Word DeepSeek等大模型从来都不是简单的写一个静态博客这么肤浅(太多博主都只讲这个内容了)借助全网大神的奇思妙想,拓展我狭隘的思维边界。 文章目录 2025-03-04-PDF转Word [toc]1-参考网址2-学习要点3-核心逻辑4-核心代码 …

【c语言函数精选题】

c语言函数精选题 一、易错概念题1.1💡建立函数的目的1.2💡函数的定义1.3💡return语句1.4💡函数的参数1.5💡复合语句声明变量 二、代码填空题2.1💡四舍五入2.2💡二分法求方程根2.3💡输…

储油自动化革命,网关PROFINET与MODBUS网桥的无缝融合,锦上添花

储油行业作为能源供应链的关键环节,其自动化和监控系统的可靠性和效率至关重要。随着工业4.0的推进,储油设施越来越多地采用先进的自动化技术以提高安全性、降低成本并优化运营。本案例探讨了如何通过使用稳联技术PROFINET转MODBUS模块网关网桥&#xff…

不同类型光谱相机的技术差异比较

一、波段数量与连续性 ‌多光谱相机‌ 波段数:通常4-9个离散波段,光谱范围集中于400-1000nm‌。 数据特征:光谱呈阶梯状,无法连续覆盖,适用于中等精度需求场景(如植被分类)‌。 ‌高光谱相机…

Linux纯命令行界面下SVN的简单使用教程

诸神缄默不语-个人技术博文与视频目录 我用的VSCode插件是这个: 可以在文件中用色块显示代码修改了什么地方,点击色块还可以显示修改内容。 文章目录 1. SVN安装2. checkout3. update1. 将文件加入版本控制 4. commit5. 查看SVN信息:info6.…

STM32单片机芯片与内部114 DSP-变换运算 实数 复数 FFT IFFT 不限制点数

目录 一、ST 官方汇编 FFT 库(64点, 256 点和 1024 点) 1、cr4_fft_xxx_stm32 2、计算幅频响应 3、计算相频响应 二、复数浮点 FFT、IFFT(支持单精度和双精度) 1、基础支持 2、单精度函数 arm_cfft_f32 3、双精…

在IDEA中进行git回滚操作:Reset current branch to here‌或Reset HEAD

问题描述 1)在本地修改好的代码,commit到本地仓库,突然发觉有问题不想push推到远程仓库了,但它一直在push的列表中存在,那该怎么去掉push列表中的内容呢? 2)合并别的分支到当前分支&#xff0…

【五.LangChain技术与应用】【14.LangChain与MoonShot、通义千问:多模型融合的实战】

兄弟们,今天咱们来唠点硬核的——当国产大模型双雄(MoonShot和通义千问)碰上LangChain这个万能胶水,会擦出什么火花?这可不是简单的API调用教程,而是实打实的多模型组合拳打法,保准看完你也能搞出个企业级AI系统!(全程大白话,放心食用) 一、为什么非得搞多模型? 先…

33.C++二叉树进阶1(二叉搜索树两种模型及其应用)

⭐上篇文章:32.C二叉树进阶1(二叉搜索树)-CSDN博客 ⭐本篇代码:c学习/18.二叉树进阶-二叉搜索树 橘子真甜/c-learning-of-yzc - 码云 - 开源中国 (gitee.com) ⭐标⭐是比较重要的部分 在上篇文章中,实现了一个简单的二…

CSS—属性继承与预处理器:2分钟掌握预处理器

个人博客:haichenyi.com。感谢关注 1. 目录 1–目录2–属性继承3–预处理器 2. 属性继承 像Android里面继承extends,类继承,子类可以使用父类的public和protected的属性和方法。子类可以直接用。   在CSS里面也是类似的。CSS里面是布局里面…

Ansys Zemax | 使用衍射光学器件模拟增强现实 (AR) 系统的出瞳扩展器 (EPE):第 4 部分

附件下载 联系工作人员获取附件 在 OpticStudio 中使用 RCWA 工具为增强现实(AR)系统设置出瞳扩展器(EPE)的示例中,首先解释了k空间中光栅的规划,并详细讨论了设置每个光栅的步骤。 介绍 本文是该四篇文…

【数据结构】堆和priority_queue

堆的定义 堆是什么?实际上堆是一种特殊的(受限制的)完全二叉树,它在完全二叉树的基础上要求每一个节点都要大于等于或者小于等于它的子树的所有节点。这个大于小于体现在节点的值或者权重。 如图所示: 根节点大于等于…

大语言模型学习--本地部署DeepSeek

本地部署一个DeepSeek大语言模型 研究学习一下。 本地快速部署大模型的一个工具 先根据操作系统版本下载Ollama客户端 1.Ollama安装 ollama是一个开源的大型语言模型(LLM)本地化部署与管理工具,旨在简化在本地计算机上运行和管理大语言模型…

1.Big-endian/ little endian大端对齐、小端对齐

一、大端模式、小端模式的介绍 Little endian:是低位字节排放在内存的低地址端、高位字节排放在内存的高地址端。 Big-endian:是高位字节排放在内存的低地址端、低位字节排放在内存的高地址端。 西门子是大端模式,因为比如 MW100 MB100(高位…

基于Python的PDF特殊字体提取器开发实践

基于Python的PDF特殊字体提取器开发实践 一、应用背景与功能概述 在PDF文档处理场景中,我们常常需要针对特定格式的文本内容进行提取分析。本文介绍的"PDF特殊字体提取器"是一款基于Python开发的桌面应用程序,主要解决以下业务需求&#xff…