對目前的web來說,前后端分離已經變得越來越流行了,越來越多的企業(yè)/網(wǎng)站都開始往這個方向靠攏。那么,為什么要選擇前后端分離呢?前后端分離對實際開發(fā)有什么好處呢?
為什么選擇前后端分離
在以前傳統(tǒng)的網(wǎng)站開發(fā)中,前端一般扮演的只是切圖的工作,只是簡單地將UI設計師提供的原型圖實現(xiàn)成靜態(tài)的HTML頁面,而具體的頁面交互邏輯,比如與后臺的數(shù)據(jù)交互工作等,可能都是由后臺的開發(fā)人員來實現(xiàn)的,或者是前端是緊緊的耦合后臺。比如,以前淘寶的Web基本上都是基于MVC框架webx,架構決定了前端只能依賴后端。所以他們的開發(fā)模式依然是,前端寫好靜態(tài)demo,后端翻譯成VM模版,這種模式的問題就不說了,被吐槽了很久。
而且更有可能后臺人員直接兼顧前端的工作,一邊實現(xiàn)API接口,一邊開發(fā)頁面,兩者互相切換著做,而且根據(jù)不同的url動態(tài)拼接頁面,這也導致后臺的開發(fā)壓力大大增加。前后端工作分配不均。不僅僅開發(fā)效率慢,而且代碼難以維護。而前后端分離的話,則可以很好的解決前后端分工不均的問題,將更多的交互邏輯分配給前端來處理,而后端則可以專注于其本職工作,比如提供API接口,進行權限控制以及進行運算工作。而前端開發(fā)人員則可以利用nodejs來搭建自己的本地服務器,直接在本地開發(fā),然后通過一些插件來將api請求轉發(fā)到后臺,這樣就可以完全模擬線上的場景,并且與后臺解耦。前端可以獨立完成與用戶交互的整一個過程,兩者都可以同時開工,不互相依賴,開發(fā)效率更快,而且分工比較均衡。
如何做到前后端分離
(以下的內容都是基于我們的電影購票網(wǎng)站來討論的)
前端的技術框架是: vue全家桶+nodejs+express(實現(xiàn)的是單頁面(SPA)應用)
首先,先分清楚前后端的工作
前端的工作:實現(xiàn)整一個前端頁面以及交互邏輯,以及利用ajax與nodejs服務器(中間層)交互
后端的工作:提供API接口,利用redis來管理session,與數(shù)據(jù)庫交互
我們項目的整一個架構如下:
接下來進入正題,如何實現(xiàn)前后端分離
一般來說,要實現(xiàn)前后端分離,前端就需要開啟一個本地的服務器來運行自己的前端代碼,以此來模擬真實的線上環(huán)境,并且,也是為了更好的開發(fā)。因為你在實際開發(fā)中,你不可能要求每一個前端都去搭建一個java(php)環(huán)境,并且在java環(huán)境下開發(fā),這對于前端來說,學習成本太高了。但如果本地沒有開啟服務器的話,不僅無法模擬線上的環(huán)境,而且還面臨到了跨域的問題,因為你如果寫靜態(tài)的html頁面,直接在文件目錄下打開的話,你是無法發(fā)出ajax請求的(瀏覽器跨域的限制),因此,你需要在本地運行一個服務器,可是又不想搭建陌生而龐大的java環(huán)境,怎么辦法呢?nodejs正好解決了這個問題。在我們項目中,我們利用nodejs的express框架來開啟一個本地的服務器,然后利用nodejs的一個http-proxy-middleware插件將客戶端發(fā)往nodejs的請求轉發(fā)給真正的服務器,讓nodejs作為一個中間層。這樣,前端就可以無憂無慮的開發(fā)了
由于前后端分離后,前端和后臺同時開發(fā)時,就可能遇到前端已經開發(fā)好一個頁面了,可是卻等待后臺API接口的情況。比如說A是負責前端,B是負責后臺,A可能用了一周做好了基本的結構,并且需要API接口聯(lián)調后,