mock(模擬): 是在項目測試中,對項目外部或不容易獲取的對象/接口,用一個虛擬的對象/接口來模擬,以便測試。html
類型1:根據接口描述語法書寫接口,並保存爲文本文件,而後使用生成工具生成在線接文檔(HTML)
-- 也有一些相似 Markdown 的接口文檔編輯器,參見:[There Are Four API Design Editors To Choose From Now][There Are Four API Design Editors To Choose From Now]。
前端
前端開發過程當中,使用 mock 數據來模擬接口的返回,對開發的代碼進行業務邏輯測試。解決開發過程當中對後臺接口的依賴。jquery
將 mock 數據寫在代碼中。git
// $.ajax({
// url: ‘https://cntchen.github.io/userInfo’, // type: 'GET', // success: function(dt) { var dt = { "isSuccess": true, "errMsg": "This is error.", "data": { "userName": "Cntchen", "about": "FE" }, }; if (dt.isSuccess) { render(dt.data); } else { console.log(dt.errMsg); } // }, // fail: function() {} // });
hijack(劫持)接口的網絡請求,將請求的返回替換爲代碼中的 mock 數據。github
The jQuery Mockjax Plugin provides a simple and extremely flexible interface for mocking or simulating ajax requests and responsesajax
Jquery
將 mock 數據保存爲本地文件。在前端調試的構建流中,用 node 開本地 mock 服務器,請求接口指向本地 mock 服務器,本地 mock 服務器 response mock 文件。編程
.mock ├── userInfo.json ├── userStars.json ├── blogs.json └── following.json
https://github.com/CntChen/userInfo
--> localhost:port/userInfo
json
https://github.com/CntChen/userInfo
--> localPath/userInfo
修改接口調用的 request 或 response,添加/刪除/修改 HTTP request line/response line/headers/body
解決跨域問題
使用 map 後,接口調用的 response 不帶 CORS headers,跨域請求在瀏覽器端會報錯。須要重寫接口返回的 header,添加 CORS 的字段。
使用接口文檔服務器來定義接口數據結構
mock 服務器根據接口文檔自動生成 mock 數據,實現了接口文檔即API
沒有找到公司級別的框架,除了阿里的 RAP。可能緣由:
A powerful high-level API design language for web APIs.
一種使用類markdown語法的接口編寫語言,使用[json-schema][json-schema]和[mson][mson]做爲接口字段描述。有完善的工具鏈進行接口文件 Edit,Test,Mock,Parse,Converter等。
Swagger是一種 Rest API 的簡單但強大的表示方式,標準的,語言無關,這種表示方式不但人可讀,並且機器可讀。能夠做爲 Rest API 的交互式文檔,也能夠做爲 Rest API 的形式化的接口描述,生成客戶端和服務端的代碼。 --[Swagger:Rest API的描述語言][Swagger:Rest API的描述語言]
定義了一套接口文檔編寫語法,而後能夠自動生成接口文檔。相關項目: Swagger Editor ,用於編寫 API 文檔。Swagger UI restful 接口文檔在線自動生成與功能測試軟件。點擊查看Swagger-UI在線示例。
WireMock is a simulator for HTTP-based APIs. Some might consider it a service virtualization tool or a mock server. It supports testing of edge cases and failure modes that the real API won't reliably produce.
對於先後端分離開發方式,已經有比較成熟的 mock 平臺,主要解決了2個問題:
預研時間比較有限,有一些新的 mock 模式或優秀的 mock 平臺沒有覆蓋到,歡迎補充。
筆者所在公司選用的平臺是 RAP,後續會整理一篇 RAP 實踐方面的文章。
問題來了:你開發中的 mock 方式是什麼?
http://yalishizhude.github.io/2016/04/19/front-back-separation/
[圖解基於node.js實現先後端分離]:http://yalishizhude.github.io/2016/04/19/front-back-separation/
http://martinfowler.com/bliki/TestDouble.html
[mock 相關的概念]:http://martinfowler.com/bliki/TestDouble.html
https://apievangelist.com/2014/11/21/there-are-four-api-design-editors-to-choose-from-now/
[There Are Four API Design Editors To Choose From Now]:https://apievangelist.com/2014/11/21/there-are-four-api-design-editors-to-choose-from-now/
http://www.ituring.com.cn/article/42460
[聯調之痛]:http://www.ituring.com.cn/article/42460
https://zhuanlan.zhihu.com/p/21353795
[Swagger:Rest API的描述語言]:https://zhuanlan.zhihu.com/p/21353795
http://www.cnblogs.com/whitewolf/p/4686154.html
[Swagger - 先後端分離後的契約]:http://www.cnblogs.com/whitewolf/p/4686154.html
http://www.jianshu.com/p/d6626e6bd72c#
[Swagger UI教程 API 文檔神器 搭配Node使用]:http://www.jianshu.com/p/d6626e6bd72c#