您是否真的需要實現前後端分離的API? -DEV社群

banq發表於2021-04-05

“低耦合高凝聚”,“資訊隱藏”:眾所周知的設計原則。儘管如此,它們在許多軟體體系結構中並未得到重視,尤其是在前端和後端之間的互動方面。
 

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防腐層。


 

相關文章