目錄

  1. 簡單工程如何運作

  2. 當我們決定擴展或成熟專案時會發生什麼

  3. BFF 到底是什麼?

  4. BFF 如何幫助擴展專案

  5. 在現實世界中使用 BFF

  6. 使用 BFF 的好處

簡單工程如何運作

簡單的兩層架構

  1. 前端呼叫後端 API 。

  2. 後端 API處理請求並發迴回應。

  3. 前端相應地呈現響應。

當您建立 MVP 時,這非常有效。

MVP 成功

當我們決定擴展專案或使專案成熟時會發生什麼

  • 後端 API 開始遵循單一職責原則。

  • API 可以組合到服務中,或者可以引入微服務。

  • 客戶端程式碼變得更加複雜。

  • 請求-回應結構的頻繁變化在前端和後端之間變得很常見。

  • 更多資料被加載到前端。

  • 當處理多種客戶端類型(例如網路和行動)時,API 變得更加臃腫。

  • 多個並發請求發送到後端來解決頁面 UI 需求。

這可能會變得像我女朋友沒完沒了的要求清單一樣令人難以承受。因此,為了提供幫助,我的一位資深隊友向我介紹了BFF的概念。無論是在現實生活中還是在程式碼中,最好的朋友總是為您提供支持。

幫助

BFF 到底是什麼? 🤔

前端特化後端 (BFF)是一個中介者,可以根據不同客戶端的特定需求客製化後端服務。將其視為最好的朋友,過濾所有混亂並只為您提供您需要的服務。前端呼叫 BFF 伺服器 API 端點,然後 BFF 執行繁重的工作,呼叫所有所需的後端服務。

圖片描述

最好的朋友

BFF 如何幫助擴展專案🛠️

在這種情況下,為什麼還要維護另一個中介伺服器 BFF?為什麼不堅持使用舊的且經過驗證的兩層架構呢?

因為現在我們關心的是使用者體驗!我們不再是MVP了,不能像無頭蒼蠅一樣到處亂跑。

雞

我們的後端 API 遵循單一職責原則,但我們的 UI 需要大量資料,這意味著要呼叫許多後端 API。問題是大多數瀏覽器只允許每個網域 6 個並發請求。您可以透過此Stackoverflow執行緒閱讀有關此限制的更多資訊。因此,如果您的儀表板顯示來自 3-4 個服務的資料,每個服務都有許多 API,則瀏覽器一次只能處理 6 個。一旦完成這些,它就會處理接下來的 6 個。

瀏覽器中每個網域允許的最大連線數

輸入BFF:客戶端對BFF進行單次呼叫,BFF對所有服務進行所有呼叫,不受並行連線限制。問題解決了!

問題解決了

但如果並發連線數不是問題怎麼辦?您還應該使用 BFF 模式嗎?我的答案是肯定的!

假設您有一個儀表板,顯示來自 3-4 個服務的資料。在將資料顯示給最終使用者之前,您可能會進行一些特定於客戶端的計算、調整或轉換。對於小塊,在客戶端執行此操作效果很好。但隨著資料轉換變得更加複雜,它成為使用者體驗的瓶頸。 JavaScript 是單線程的,UI 開始感覺滯後或不穩定,因為瀏覽器忙於轉換資料而不是為 UI 提供服務。

一個簡單的解決方法:將所有表示、適應或轉換邏輯移至 BFF。這樣,客戶端的瀏覽器就可以自由地專注於渲染內容。另外,BFF 會適應後端 API 回應結構的任何變化,因此前端會看到一致的回應結構。

但是 BFF API 變得太籠統或臃腫怎麼辦?是不是也需要遵循單一職責原則?

對 BFF 來說,單一責任原則有點不同。理想情況下,單一 BFF 伺服器端點應該會載入或更新與單一 UI 頁面相關的資料。不同的客戶端類型(例如行動用戶端和 Web 用戶端)可以擁有自己的 BFF 伺服器。每個 BFF 伺服器都會向客戶端發回一個精簡的、客製化的回應。行動裝置比 Web 佔用更少的資源,因此 BFF 伺服器可以輕鬆調整回應。

因此,雖然與後端服務 API 相比,BFF 伺服器 API 可能顯得臃腫且通用,但它們仍然遵循單一職責原則。

前端後端 (BFF) 架構

在現實世界中使用 BFF 🌍

設定和探索開源專案

  1. 專案設定:
  1. 開啟網路標籤:
  • 開啟瀏覽器的開發人員工具(按F12或Ctrl+Shift+I )。

  • 轉到“網路”選項卡以監控 API 呼叫。

  1. 觀察 API 呼叫:
  • 請注意,頁面從/internal/team/${team_id}/dora_metrics的回應載入大部分資料。

  • 這是一個 BFF API 端點,負責載入/dora-metrics路由頁面所需的所有資料。

中間件 dora 指標儀表板 api 呼叫

  1. 檢查程式碼庫:
  • 導航至/internal/team/[team_id]/dora_metrics模組的程式碼。

  • 使用Promise.all觀察多個後端服務的並發呼叫。

圖片描述

  1. 了解好處:
  • 在底層,我們呼叫 5 個不同的後端服務,總共 18 個 API 呼叫。

  • 如果從前端進行相同數量的呼叫,則可能比使用 BFF 方法多花費 3 倍的時間。

遵循這些步驟將幫助您了解如何在實際專案中實現 BFF 模式,並了解它在效能和使用者體驗方面帶來的好處。

使用 BFF 的好處🌟

  1. 改進的使用者體驗:透過將複雜的資料轉換和聚合卸載到 BFF,客戶端的瀏覽器可以專注於渲染,從而獲得更流暢的 UI 體驗。

  2. 最佳化的 API 呼叫:BFF 可以將多個後端 API 呼叫聚合為一個呼叫,從而減少客戶端需要發出的請求數量。

  3. 客製化回應:不同的客戶端(網路、行動)可以擁有其特定的 BFF 伺服器,確保每個用戶端收到適合其需求的資料。

  4. 適應性:BFF可以適應後端API結構的變化,為前端提供一致的介面。

總而言之,當應用程式從 MVP 發展到成熟產品時,採用 BFF 模式可以顯著提高應用程式的可擴展性、可維護性和使用者體驗。請記住,無論是在程式碼中還是在生活中,好朋友始終是您的後盾!

最好的朋友拯救了這一天

如果您發現本文有幫助並且喜歡探索 BFF 模式,請考慮為中間件儲存庫加註星標。您的支持有助於我們繼續改進並與社區分享有價值的內容。謝謝你!

{% 嵌入 https://github.com/middlewarehq/middleware %}


原文出處:https://dev.to/middleware/best-architecture-for-your-next-project-framework-doesnt-matter-29em


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝34   💬1  
637
🥈
mike
1
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
📢 贊助商廣告 · 我要刊登