1 什麼是前後端分離
這裏的前後端分離, 定義爲網頁的動態內容都通過ajax等異步的方式進行。
關於前後端分離常見的另一種含義:前端完全負責view層和controller層。 見另一篇筆記:https://blog.csdn.net/qq_19768163/article/details/93998521
2 爲什麼要前後端分離
前端和後端職責分離
前端偏向於處理用戶體驗相關的方面, 後端服務則偏業務邏輯。
前後端技術分離
前端只需要懂HTML/JS/CSS就可以了, 後端也不需要去了解前端技術。
上面兩點是在前後端有不同人員開發的情況下才有的好處, 下面兩點是無論有沒有獨立的前後端開發人員都有的好處:
前後端分離帶來了用戶體驗和業務邏輯的解耦
前後端都可以獨立變更, 只要保持調用的接口不變。
複用
同一套接口, 可以複用在app端, web端等。
3 怎麼進行前後端分離(方案)
3.1 部署方案
部署方案按照是否部署在相同的域, 可以分爲兩種方式, 同源部署和非同源部署
同源部署
同源是指前端項目和後端項目部署的域名和端口都一致的情況, 我知道的有兩種方式:
- 前段項目和後端項目都不熟在Nginx將請求分別轉發到靜態服務器和動態服務器;
- 前端項目部署在後端項目中, 比如部署到servlet應用的webroot下;
這種方式的好處是, 用戶認證的方式依然可以使用基於session/cookie的方式來進行。
非同源部署
指前端項目和後端項目使用不同的域名部署。 需要進行跨域相關的配置, 但是這種方式無法很方便的使用session/cookie的方式來進行用戶認證, 替代的方案有JWT等。
3.2 用戶認證
基於cookie/session的認證
只要保證前端和後端部署在同一個域下, 那麼就可以沿用session/cookie的認證機制。
基於Token/JWT的認證
jwt, 全稱是json web token, 是一種將用戶信息都編碼到一個token中, 然後每次請求都帶上這個token。 這種情況下, 後端是完全無狀態的。
基於OAuth的認證方案
3.3 mock方案
如果使用前後端分離的模式, 那麼可以將開發節點劃分爲接口定義, 開發, 聯調三個階段。 可以使用mock的方案, 在定義完成之後, 前端使用mock的接口服務進行開發, 不需要等待後端開發完成之後才進行開發。
3.4 測試方案
服務端的測試, 可以有單元測試和web接口測試。 而前端進行測試則是集成測試和用戶體驗測試。
其中服務端的測試其實是可以做到自動化的, 例如使用spring 相關的測試支持工具。