您是否真的需要實現前後端分離的API? -DEV社群
“低耦合高凝聚”,“資訊隱藏”:眾所周知的設計原則。儘管如此,它們在許多軟體體系結構中並未得到重視,尤其是在前端和後端之間的互動方面。
API對於隱藏資訊很有價值
透過提供API系統,可以確定將哪些資訊公開給外界以及將哪些資訊保密(資訊隱藏)。
為什麼這麼重要?因為API越廣泛,維護起來就越昂貴。考慮一下公開每個實現細節的極端情況。系統中的每個更改都可能破壞使用該程式碼的客戶端。這就是我們努力擁有小型API的原因。
但是,API都會阻止我們自由開發系統。我們始終必須仔細記錄API,並考慮不要破壞我們的客戶。必須以向後相容的方式引入更改,否則我們必須調整我們的系統的部署,而這些部署很快就會變成一個龐大的部署地獄。
API作為產品
但是,如果很難維護它們,為什麼系統會提供這麼多的API?原因之一可能是API是系統的唯一賣點。API是賺錢的產品。在這種情況下,使用諸如超媒體之類的技術並關注向後相容性。您的客戶將不勝感激,並且您的API產品大放異彩。
前端和後端的分離的API
後端和前端之間的凝聚很自然,因為每當需要在前端顯示一些新資料時,都需要調整後端。那麼,為什麼我們要透過在它們之間放置一堵牆(API)來使它們分離呢?
在大多數情況下,這種設計是由組織或技術環境決定的。有專門的後端和前端團隊,但是我想知道在決定分離團隊時是否總是考慮維護API的開銷。
使用客戶端渲染的願望
另一個驅動使用API因素是希望使用現代Javascript UI庫(例如Angular,React或Vue.js)來實現前端。與伺服器端呈現(SSR)方法相反,這些庫在瀏覽器中的客戶端(CSR)處呈現檢視,並依賴於後端提供的服務(REST,GraphQL等)來檢索資料並執行操作。
儘管我認為SSR現在被大大忽視低估了,但是...使用現代javascript庫庫並不一定需要API!由於後端程式碼是在伺服器端執行的,而前端程式碼是在使用者的瀏覽器中執行的,因此您在技術和環境方面都遇到了麻煩。此中斷需要使用REST或GraphQL才能同步兩個環境。
我稱其為橋樑而不是API,因為您可以與前端攜手發展後端服務。無需仔細記錄API或處理重大更改,因為那裡只有一個客戶端。這個客戶端是眾所周知的,因為它位於同一系統中。結果是後端和前端始終部署為一個整體,而這些文件和相容性方面的挑戰就消失了。
結論
技術不應成為系統設計的驅動力。關於後端和前端之間的互動,請考慮需求,並確定是要使用整體式前端還是獨立式系統。“低耦合-高凝聚力”是有力的指導方針!
如果您決定使用一個獨立的系統,則取決於您選擇伺服器端還是客戶端渲染方法。儘管CSR和SPA(單頁應用程式)經常被合併在一起,但是您仍可以使用CSR,同時仍具有每個模組的前端。
banq:該文觀點有點偏頗,前端有安卓app 蘋果app和html app等各種客戶端,如何降低這些不同客戶端對後端的耦合,這是需要松耦合,而不是考慮它們的高凝聚,松耦合高凝聚不能只從一個角度考慮,該文只從業務角度考慮,但是在業務領域的聚合是存在上下文邊界之內,不是跨上下文邊界,API是前端和後端的DDD防腐層。
相關文章
- 實現前後端分離的心得後端
- 前後端分離之更好的mock你的後端api後端MockAPI
- centos7.9 配置nginx實現前後端分離CentOSNginx後端
- NCF 如何通過WebApi實現前後端分離WebAPI後端
- 遷移iOS API到前端並實現前後端分離(非Node.js)iOSAPI前端後端Node.js
- ???前後端分離模式的思考???後端模式
- 使用 chromium 以及 Chrome 外掛 API 實現本地除錯前後端分離專案ChromeAPI除錯後端
- 前後端分離——使用OSS後端
- 前後端分離整合SpringSecurity後端SpringGse
- 前後端分離那些事後端
- 再談前後端分離後端
- 淺談前後端分離後端
- DevOps 視角的前後端分離與實戰dev後端
- 前後端分離的優缺點後端
- 簡單的前後端分離 Cas後端
- SpringBoot+Vue.js實現前後端分離的檔案上傳Spring BootVue.js後端
- laravel 社群真正比較好的前後端分離原始碼——青梧商城Laravel後端原始碼
- 前後端分離Ajax入門後端
- vue前後端分離修改webpackVue後端Web
- 前後端分離——資料mock後端Mock
- JWT 實現 Laravel 認證(前後端分離專案必備)JWTLaravel後端
- 一次前後端分離架構的實踐後端架構
- 前後端分離的好處有哪些?後端
- 前後端分離後模組開發後端
- SpringBoot+Vue.js前後端分離實現大檔案分塊上傳Spring BootVue.js後端
- 以api文件為中心--前後端分開發離新思維API後端
- 從前後端分離到GraphQL,攜程如何用Node實現?\n後端
- Cloudera Manager 前後端分離部署方法Cloud後端
- 前後端分離之Ajax入門後端
- 從部署上做到前後端分離後端
- Flask前後端分離專案案例Flask後端
- Laravel 前後端分離 csrf 防護Laravel後端
- spring shiro+cas 前後端分離Spring後端
- 前後端分離,後端用springboot遇到的跨域問題後端Spring Boot跨域
- Windows+Pycharm+Flask+Vue+Element-Plus 前後端分離實現分寫查詢功能WindowsPyCharmFlaskVue後端
- React/Vue 實現的前端應用, java/Go/Python 實現的後端應用,前後端分離的應用部署的最佳實踐ReactVue前端JavaGoPython後端
- SpringBoot + Angular前後端分離專案部署(更新)實錄Spring BootAngular後端
- Django + Taro 前後端分離專案實現企業微信登入Django後端