關於mock server

這篇技術博客是在知乎上看到的 知乎js大神張雲龍寫的 這裏貼過來記錄下,若是侵權 請告知將及時刪除。php

---------------------------前端

爲了更好的分工合做,讓前端能在不依賴後端環境的狀況下進行開發,其中一種手段就是爲前端開發者提供一個web容器,這個本地環境就是 mock server。

要完整運行前端代碼,一般並不須要完整的後端環境,咱們只要在mock server中實現如下幾點就好了:java

  1. 能渲染模板
  2. 實現請求路由映射
  3. 數據接口代理到生產或者測試環境

能渲染模板很簡單,在mock server中集成模板引擎就好了,而後提供模擬的頁面數據用於完整渲染頁面,不過有時候生產環境中的模板引擎可能有一些環境依賴的擴展,這個要單獨實現。

請求路由映射,實現原理就是要讓本地的mock server有一個router,能接收全部HTTP請求,而後在router中根據線上的路由約定,實現一套同樣的規則,這個也不難,不贅述了。

最後數據接口代理。與前端相關的HTTP請求一共就3種響應狀況:python

  1. 渲染頁面的請求;
  2. 靜態資源的請求;
  3. 獲取數據的請求。

因爲實現了router,咱們把渲染頁面的請求在mock server中處理掉,直接輸出本地模板的渲染結果;靜態資源的請求直接返回文件內容;而把數據請求代理到測試或者生產環境,本地就不用mock了(固然,若是出現新的接口測試環境沒有的,能夠追加router,在mock server想響應假數據)

至於題主說的url一致性問題,其實不存在的。你的這個 http://www.foo.com/bar 的數據請求,在js中應該這樣寫:

web

$.get('/bar', callback) 


這種寫法,省略了host,在線下開發時,其最終結果是請求 ,而因爲咱們在mock server中實現了路由規則,這個請求實際上被代理到了測試/生產環境去獲取數據。而當你把代碼部署到線上時,其訪問真實請求地址又自動變成了你指望的 http://www.foo.bar,正常運行。json

補充一些Tips:後端

  • 因爲Mock Server須要具有渲染模板的能力,所以可能須要一種輕量的服務端跨平臺server實現方案,若是是java的後端,能夠考慮使用jetty,一個1.8M的jar便可;若是是php的後端,能夠考慮使用php 5.4之後內置的server,啓動命令是 php -S 127.0.0.1:3000 router.php;若是是Nodejs,那就很簡單了,估計都不須要Mock Server,本地也能夠跑的
  • 當代理數據接口的生產/測試環境不具有新接口的時候,Mock Server要在本地製造假數據響應請求,可使用  這類在線的JSON數據生成工具,很是方便。
不少前端工程師覺得前端分離的惟一途徑是接入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

相關文章
相關標籤/搜索