這篇技術博客是在知乎上看到的 知乎js大神張雲龍寫的 這裏貼過來記錄下,若是侵權 請告知將及時刪除。php
---------------------------前端
爲了更好的分工合做,讓前端能在不依賴後端環境的狀況下進行開發,其中一種手段就是爲前端開發者提供一個web容器,這個本地環境就是 mock server。
要完整運行前端代碼,一般並不須要完整的後端環境,咱們只要在mock server中實現如下幾點就好了:java
能渲染模板很簡單,在mock server中集成模板引擎就好了,而後提供模擬的頁面數據用於完整渲染頁面,不過有時候生產環境中的模板引擎可能有一些環境依賴的擴展,這個要單獨實現。
請求路由映射,實現原理就是要讓本地的mock server有一個router,能接收全部HTTP請求,而後在router中根據線上的路由約定,實現一套同樣的規則,這個也不難,不贅述了。
最後數據接口代理。與前端相關的HTTP請求一共就3種響應狀況:python
因爲實現了router,咱們把渲染頁面的請求在mock server中處理掉,直接輸出本地模板的渲染結果;靜態資源的請求直接返回文件內容;而把數據請求代理到測試或者生產環境,本地就不用mock了(固然,若是出現新的接口測試環境沒有的,能夠追加router,在mock server想響應假數據)
至於題主說的url一致性問題,其實不存在的。你的這個 http://www.foo.com/bar 的數據請求,在js中應該這樣寫:
web
$.get('/bar', callback)
這種寫法,省略了host,在線下開發時,其最終結果是請求 http://127.0.0.1:3000/bar,而因爲咱們在mock server中實現了路由規則,這個請求實際上被代理到了測試/生產環境去獲取數據。而當你把代碼部署到線上時,其訪問真實請求地址又自動變成了你指望的 http://www.foo.bar,正常運行。json
補充一些Tips:後端
不少前端工程師覺得前端分離的惟一途徑是接入NodeJS做爲UI層,其實不是的,還有一種方案就是這種Mock Server,前端工程師直接寫後端模板,效果有時候甚至更好,並且對已有先後端架構的改動成本最小。
====== 更新 ======
經常使用腳本語言下開啓簡易web server的方法,能夠用於實現Mock Server:ruby
ruby -run -e httpd . -p 9090前端工程師
python -m SimpleHTTPServer 8000架構
php -S 127.0.0.1:8088 router.php