基於Spring Boot架構的前后端完全分離項目API路徑問題


最近的一個項目采用前后端完全分離的架構,前端組件:vue + vue-router + vuex + element-ui + axios,后端組件:Spring Boot + MyBatis。之所以這樣做是為了考慮后端水平擴容的便利性,在部署的時候完全可以將前后端彼此獨立部署,前端部署可以直接使用諸如Nginx這樣的高性能Web服務器。
前后端完全分離的架構設計

前端需要知道它所訪問的后端服務器IP地址才能訪問到數據,但是如果將IP地址硬編碼在前端代碼中的話,在部署的時候會存在一個問題:當服務器端IP地址變化之后必須重新打包發布(開發,測試和產線的環境不同,也需要針對特定環境打包)。

相對路徑

前端使用相對路徑訪問API
如果后端項目的上下文路徑為“/”,那么出於對資源利用率的考慮,在項目前期(規模小)可以將前后端部署在同一個嵌入式Tomcat容器中(Spring Boot框架支持靜態頁面)。此時,在前端項目的Ajax請求中可以使用相對路徑,如下所示:

var url = "/api/v1/data"
$.get(url, function(data){
	alert("Data Loaded: " + data);
});

此時Ajax會自動在相對路徑前面加上http://host:port ,並且上下文路徑為“/”,那么最終的請求的API路徑為:http://host:port/ + 相對路徑。此時就不用在前端的代碼中硬編碼后端地址和端口了,但是注意這個用法的前提必須滿足2個條件:
(1)前后端必須部署在同一個容器
(2)后端的上下文路徑必須為“/”

絕對路徑

前端使用絕對路徑訪問API
隨着項目的發展,前后端要同時支持水平擴容(集群化),此時需要考慮將前后端完全獨立部署,那么在前端的Ajax請求中就不能使用相對路徑了(因為主機地址已經不同,存在跨域),對於后端API的訪問只能使用絕對路徑,而且也只能硬編碼后端的訪問地址和端口(如:http://host:port/api/xxx )。為了應對這種尷尬的局面,可以考慮使用域名的方式訪問后端服務,這樣只要域名不變,前端的訪問地址就不用變更。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM