前后端分離要不要搞?
這個我覺得按照康威定律辦就好了, 前后端如果是兩撥人, 不要多想一定要分離, 如果是一撥人, 確定前后端是否要分離需要算賬 , 收益是它會強制我們按照服務的理念指導系統設計, 將來的微服務也就順理成章, 代價就是架構復雜了, 開發和運維都有些成本.
下面假定我們確定前后端要分離, 就要考慮實現的方案/技術選型/常見問題處理.
=============================
前后端分離的幾種實現思路
=============================
思路1: 前端 Nginx(vue+element UI+axios) 和 后端Tomcat(Spring Boot)
思路2: 前端 Nginx(vue+element UI+axios) 和 中間層(NodeJS) 和 后端Tomcat(Spring Boot)
思路3: 前端 Nginx(vue+element UI+axios) 和 中間層Tomcat(Spring Boot路由/Render) 和 后端Tomcat(Spring Boot)
簡單分析:
思路1: html render 是由前端完成, 前端通過ajax方式完成數據請求, 主要問題有: ajax 需要寫死后端服務地址, 想象一下, 如果UI需要訪問10個后端服務, 就需要寫死10個地址, 同時沒法利用上后端的服務發現技術. 前后端未分離情況下不存在這些問題. 一個解決方法是, 引入API網管.
思路2: 這是淘寶前后端分離的實踐, html render 由中間層 NodeJS 完成, 中間層同時完成數據轉發和路由設計工作, 也就是承擔了MVC中的Controller. ajax調用不需要寫死, 可以在NodeJS層從服務發現中動態提供后端服務地址.
思路3: 和思路2差不多, 就是將NodeJS換成 SpringBoot 而已. 這個思路相比思路2的優點是, 不需要引入一個全新的NodeJS架構.
我個人推薦思路3, 優點是:
1. 在不引入API網管情況下, 能解決前端需要寫死后端請求地址的問題.
2. 熟悉 SpringBoot 的技術人員比 NodeJS 要多得多.
圖片取自:淘寶前后端分離實踐
=============================
前后端分離的技術選型
=============================
前端選型, vue+element UI+axios 目前看在國內比較流行.
https://segmentfault.com/a/1190000010167910
https://blog.csdn.net/lgcjava/article/details/75331074
=============================
前后端分離經常碰到的問題
=============================
前后端分離 -- 跨域訪問的實現
https://blog.csdn.net/github_33809414/article/details/81774885
https://www.cnblogs.com/hbb0b0/p/8035241.html
https://segmentfault.com/a/1190000012960641
前后端分離 -- 使用axios做網絡請求 -- 使用Cookie SESSIONID
https://blog.csdn.net/dodan/article/details/78543912