BFF —— Backend For Frontend

轉載From: https://www.jianshu.com/p/eb1875c62ad3
本文主要內容:

  1. 什麼是 BFF
  2. BFF 解決了什麼問題
  3. 使用 BFF 的正確姿勢
  4. 實戰中的玩法
    什麼是 BFF
    BFF,即 Backend For Frontend(服務於前端的後端),也就是服務器設計 API 時會考慮前端的使用,並在服務端直接進行業務邏輯的處理,又稱爲用戶體驗適配器。BFF 只是一種邏輯分層,而非一種技術,雖然 BFF 是一個新名詞,但它的理念由來已久。
    在這裏插入圖片描述

BFF 解決了什麼問題
如下圖,在我們的前端頁面時常存在,某個頁面需要向 backend A、backend B 以及 backend C… 發送請求,不同服務的返回值用於渲染頁面中不同的 component,即一個頁面存在很多請求的場景。
在這裏插入圖片描述

此時,每次訪問該頁面都需要發送 3 個請求。同時爲了保障 Android,iOS,以及 Web 端的不同需求,需要爲不同的平臺寫不同的 API 接口,而每當值發生一些變化時,需要 Android,iOS,Web 做出修改。與此同時,當我們需要對一個字符串進行處理,如限定 140 個字符的時候,我們需要在每一個客戶端(Android,iOS,Web)分別實現一遍,這樣的代價顯然相當大。

於是,我們就需要 BFF 作爲中間件。在這個中間件上我們將做一些業務邏輯處理:
在這裏插入圖片描述

而當我們有了 BFF 這一層時,我們就不需要考慮系統後端的遷移。後端發生的變化都可以在 BFF 層做一些響應的修改。

例如,我們加入 BFF 層,原本每次訪問發送 3 請求頁面,變成一個請求。
在這裏插入圖片描述

使用 BFF 的正確姿勢
多端應用
我們在設計 API 時會考慮到不同設備的需求,也就是爲不同的設備提供不同的 API,雖然它們可能是實現相同的功能,但因爲不同設備的特殊性,它們對服務端的 API 訪問也各有其特點,需要區別處理。

服務聚合
隨着微服務的興起,原本在同一個進程內運行的業務流程被拆分到了不同的服務中。這在增加業務靈活性的同時,也讓前端的調用變得更復雜。BFF 的出現爲前端應用提供了一個對業務服務調用的聚合點,它屏蔽了複雜的服務調用鏈,讓前端可以聚焦在所需要的數據上,而不用關注底層提供這些數據的服務。

非必要,莫新增
我們在看到 BFF 帶來的各種好處的同時,也要注意到它所帶來的代碼重複和工作量增加方面的問題。如果與已有 BFF 功能類似,且展現數據的要求也相近的話,一定要謹慎對待新增 BFF 的行爲。因此,建議非必要,莫新增。

實戰中的玩法
訪問控制
例如,服務中的權限控制,將所有服務中的權限控制集中在 BFF 層,使下層服務更加純粹和獨立。

應用緩存
項目中時常存在一些需要緩存的臨時數據,此時 BFF 作爲業務的匯聚點,距離用戶請求最近,遂將該緩存操作放在 BFF 層。

第三方入口
在業務中需要與第三交互時,將該交互放在 BFF 層,這樣可以只暴露必要信息給第三方,從而便於控制第三方的訪問。

作者:bme_ritter
鏈接:https://www.jianshu.com/p/eb1875c62ad3
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章