后端架構模式之-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 已成為前后端分離架構的重要組成部分。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/71436.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71436.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71436.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

upload-labs靶場 1-21通關

目錄 1.Pass-01 前端繞過 分析 解題 2.Pass-02 服務器端檢測--修改IMME 分析 解題 3.Pass-03 黑名單繞過 分析 解題 4.Pass-04 .htaccess繞過 分析 解題 5.Pass-05 . .繞過和.user.ini繞過 分析 解題 6.Pass-06 大小寫繞過 分析 解題 7.Pass-07 空格繞過 分…

信貸風控系統架構設計

設計一個信貸風控系統需要綜合考慮業務需求、技術架構、數據治理、合規安全等多個維度。以下是從頂級Java架構師視角的系統設計方案,分模塊詳細說明: 一、系統架構設計原則 高可用性:7x24小時服務,多機房容災。低延遲&#xff1a…

Ubuntu20.04 在離線機器上安裝 NVIDIA Container Toolkit

步驟 1.下載4個安裝包 Index of /nvidia-docker/libnvidia-container/stable/ nvidia-container-toolkit-base_1.13.5-1_amd64.deb libnvidia-container1_1.13.5-1_amd64.deb libnvidia-container-tools_1.13.5-1_amd64.deb nvidia-container-toolkit_1.13.5-1_amd64.deb 步…

【工具】COME對比映射學習用于scRNA-seq數據的空間重構

介紹 單細胞RNA測序(scRNA-seq)能夠在單細胞分辨率下實現高通量轉錄組分析。固有的空間位置對于理解單細胞如何協調多細胞功能和驅動疾病至關重要。然而,在組織分離過程中,空間信息常常丟失。空間轉錄組學(ST&#xf…

Idea配置注釋模板

一、配置類注釋模板 打開IDEA,打開settings(快捷鍵:Ctrl Alt s),選擇Editor,找到File and Code Templates 這里以設置class文件為例,點擊Class,在右側配置以下內容 #if (${PACKAGE_NAME} && $…

pytorch高可用的設計策略和集成放大各自功能

在使用 PyTorch 編寫模型時,為確保模型具備高可用性,可從模型設計、代碼質量、訓練過程、部署等多個方面采取相應的方法,以下為你詳細介紹: 模型設計層面 模塊化設計 實現方式:將模型拆分成多個小的、獨立的模塊,每個模塊負責特定的功能。例如,在一個圖像分類模型中,可…

從開源大模型工具Ollama存在安全隱患思考企業級大模型應用如何嚴守安全紅線

近日,國家網絡安全通報中心通報大模型工具Ollama默認配置存在未授權訪問與模型竊取等安全隱患,引發了廣泛關注。Ollama作為一款開源的大模型管理工具,在為用戶提供便捷的同時,卻因缺乏有效的安全管控機制,存在數據泄露…

初識Qt · 信號與槽 · 基礎知識

目錄 前言: 信號和槽初識 兩個問題 前言: 本文我們正式開始介紹信號與槽這個概念,在談及Qt中的信號與槽這個概念之前,我們不妨回顧一下Linux中的信號,比如發生了除0錯誤,OS就會給該進程發送一個信號&am…

Kotlin 5種單例模式

在Kotlin中實現單例模式有多種方法,以下是幾種常見的方法: 餓漢式 餓漢式是最簡單的一種實現方式,在類加載時就完成了實例的初始化。 //餓漢式 object Singleton1 {fun printMessage() {println("餓漢式")} }懶漢式 懶漢式是延遲…

探秘基帶算法:從原理到5G時代的通信變革【一】引言

文章目錄 一、引言1.1 研究背景與意義1.2 研究目的與方法1.3 研究內容與創新點 本博客為系列博客,主要講解各基帶算法的原理與應用,包括:viterbi解碼、Turbo編解碼、Polar編解碼、CORDIC算法、CRC校驗、FFT/DFT、QAMtiaozhi/解調、QPSK調制/解…

C/C++輸入輸出(1)

1.getchar和putchar 1.1getchar() 函數原型: 1 int getchar(void); getchar()函數返回用戶從鍵盤輸入的字符,使用時不帶有任何參數。 程序運行到這個命令就會暫停,等待用戶從鍵盤輸入,等同于使用cin或scanf()方法讀取一個字符…

【消息隊列】數據庫的數據管理

1. 數據庫的選擇 對于當前實現消息隊列這樣的一個中間件來說,具體要使用哪個數據庫,是需要稍作考慮的,如果直接使用 MySQL 數據庫也是能實現正常的功能,但是 MySQL 也是一個客戶端服務器程序,也就意味著如果想在其他服…

飛機大戰lua迷你世界腳本

-- 迷你世界飛機大戰 v1.2 -- 星空露珠工作室制作 -- 最后更新:2024年1月 ----------------------------- -- 迷你世界API適配配置 ----------------------------- local UI { BASE_ID 7477478487091949474-22856, -- UI界面ID ELEMENTS { BG 1, -- 背景 BTN_LE…

圖解MOE大模型的7個核心問題并探討DeepSeekMoE的專家機制創新

原文地址:https://newsletter.maartengrootendorst.com/p/a-visual-guide-to-mixture-of-experts #mermaid-svg-FU7YUSIfuXO6EVHa {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-FU7YUSIfuXO6EVHa .error-icon{fill…

【智能機器人開發全流程:硬件選型、軟件架構與ROS實戰,打造高效機器人系統】

文章目錄 1. 硬件層設計(1) 傳感器選型(2) 計算平臺 2. 軟件架構設計(1) 核心模塊劃分(2) 通信框架 3. 關鍵實現步驟(1) 硬件-軟件接口開發(2) SLAM與導航實現(3) 仿真與測試 4. 典型框架示例基于ROS的移動機器人分層架構 5. 優化與擴展6. 開源項目參考 1. 硬件層設計 (1) 傳感…

React Native v0.78 更新

這個版本在 React Native 中引入了 React 19,并帶來了一些重要的新功能,例如 Android 矢量圖(Vector Drawables)的原生支持 以及 iOS 更好的 Brownfield 集成。 亮點 React 19 集成更小更快的發布節奏可選擇在 Metro 中啟用 Jav…

機器學習數學通關指南

? 寫在前面 💡 在代碼的世界里沉浸了十余載,我一直自詡邏輯思維敏捷,編程能力不俗。然而,當我初次接觸 DeepSeek-R1 并領略其清晰、系統的思考過程時,我不禁為之震撼。那一刻,我深刻意識到:在A…

MySQL 實驗1:Windows 環境下 MySQL5.5 安裝與配置

MySQL 實驗1:Windows 環境下 MySQL5.5 安裝與配置 目錄 MySQL 實驗1:Windows 環境下 MySQL5.5 安裝與配置 一、MySQL 軟件的下載二、安裝 MySQL三、配置 MySQL 1、配置環境變量2、安裝并啟動 MySQL 服務3、設置 MySQL 字符集4、為 root 用戶設置登錄密…

煙花燃放安全管控:智能分析網關V4煙火檢測技術保障安全

一、方案背景 在中國諸多傳統節日的繽紛畫卷中,煙花盛放、燒紙祭祀承載著人們的深厚情感。一方面,煙花璀璨,是對節日歡慶氛圍的熱烈烘托,寄托著大家對美好生活的向往與期許;另一方面,裊裊青煙、點點燭光&a…

Elasticsearch:解鎖深度匹配,運用Elasticsearch DSL構建閃電般的高效模糊搜索體驗

目錄 Elasticsearch查詢分類 葉子查詢 全文檢索查詢 match查詢 multi_match查詢 精確查詢 term查詢 range查詢 復雜查詢 bool查詢簡單應用 bool查詢實現排序和分頁 bool查詢實現高亮 場景分析 問題思考 解決方案 search_after方案(推薦) point in time方案 方案…