mock-server:一個(gè)基于NODEJS的WEB版的數(shù)據(jù)模擬系統(tǒng)
部分功能及優(yōu)化未在此文章中同步拾枣,最新功能以倉(cāng)庫(kù)為準(zhǔn):
https://github.com/flftfqwxf/mockserver
?demo
demo只作演示作用贸呢,并會(huì)定期清除數(shù)據(jù)
更新:
2017-7-16
修改項(xiàng)目ID為隨機(jī)hash汁雷,并以此ID為接口路徑的前綴谈宛,并刪除原設(shè)置API前綴功能
優(yōu)化代碼叮盘,及提供POST,PUT,DELETE等method type的接口預(yù)覽功能
添加功能(2017-5-4):
添加自動(dòng)導(dǎo)入數(shù)據(jù)庫(kù)
添加中英文切換
添加功能(2017-4-11):
支持跨域調(diào)用項(xiàng)目接口
添加header 代理白名單和黑名單
允許自定義項(xiàng)目接口前綴
優(yōu)化交互體驗(yàn)及BUG
功能包含:
支持可視化編輯JSON接口數(shù)據(jù)及接口文檔
支持GET膜蛔、POST处硬、PUT、DELETE等所有HTTP請(qǐng)求類型
支持指定返回狀態(tài)碼蛙紫,默認(rèn)200
支持延時(shí)返回?cái)?shù)據(jù)
支持mockjs
支持模擬接口與真實(shí)接口切換,在切換到真實(shí)接口時(shí)拍屑,并能夠自動(dòng)接收POST,GET,COOKIE等在http header請(qǐng)求的參數(shù)
先放出系統(tǒng)地址:
https://github.com/flftfqwxf/mock-server
歡迎star,并提出改進(jìn)意見
更新日志(2017-2-15):
優(yōu)化交互及文檔完善
添加返回狀態(tài)碼
添加延遲返回?cái)?shù)據(jù)
優(yōu)化部分驗(yàn)證
以下正文:
隨著最近幾年前端技術(shù)的發(fā)展,ReactJs,Angular,VueJS等框架的盛行坑傅,前后分離開發(fā)的系統(tǒng)越來(lái)越多僵驰,而前后端的分離,必然需要大量的AJAX接口來(lái)實(shí)現(xiàn)裁蚁。而由于前后端開發(fā)經(jīng)常是并行的,所以前端必須經(jīng)常需要模擬AJAX數(shù)據(jù)接口继准,以方便在后端還未準(zhǔn)備好接口時(shí)的開發(fā)及調(diào)試枉证,故此就需要mock-server服務(wù)(數(shù)據(jù)模擬服務(wù))。
剛開始移必,我準(zhǔn)備找一些開源的工具來(lái)作為mock-server室谚,而目前基于nodejs的mock-server也有不少,早期就嘗試過(guò) puer崔泵,imitator等開源系統(tǒng)秒赤,基本滿足了個(gè)人開發(fā)的需求。
但隨著其他開發(fā)人員的加入憎瘸,特別是后端的同學(xué)加入入篮,上面的系統(tǒng)便靠成了一個(gè)困擾。
第一:不方便共享和不夠簡(jiǎn)便幌甘,這些系統(tǒng)都還是基于NODEJS的潮售,新加入的同學(xué)都需要在自己本地安裝一次相應(yīng)的包和環(huán)境,比較麻煩锅风,而且每個(gè)人的MOCK-SERVER都是獨(dú)立的酥诽,不方便共享,有時(shí)需要后端開發(fā)同學(xué)先定義后接口結(jié)構(gòu)皱埠,由于他們并沒(méi)有安裝肮帐,也不是很方便,后期接口有改變時(shí)边器,也不方便同步训枢。
第二:接口切換不方便托修。以上工具,只能全局不使用mock-server與全局使用mock-server中切換肮砾,單個(gè)接口的切換诀黍,需要依賴其他配置,比如nginx為每個(gè)接口作配置仗处。
第二:功能不健全眯勾,且不方便非前端人員使用,且以上工具只是簡(jiǎn)單的模擬數(shù)據(jù)婆誓,對(duì)接口的文檔參數(shù)說(shuō)明吃环,接口分類管理等,也不夠直觀洋幻。
因此郁轻,自己就開始自己開發(fā)一個(gè)基于NODEJS的,WEB版 mock-server系統(tǒng)文留。
https://github.com/flftfqwxf/mock-server
此系統(tǒng)基于thinkjs+mysql5.7.14開發(fā)好唯,主要用于方便可視化的管理數(shù)據(jù)接口的數(shù)據(jù)模擬,接口文檔管理燥翅。
下面簡(jiǎn)單說(shuō)明一下相應(yīng)功能:
添加/編輯接口(截圖只展示部分功能):
如圖所示骑篙,大致包含了以下功能:
基本信息:
匹配方式:分為全地址匹配和部分匹配
有些時(shí)候,你的請(qǐng)求地址的參數(shù)是動(dòng)態(tài)的森书,比如分頁(yè)【http:192.168.0.2/a?page=1】,這個(gè)時(shí)候的路徑匹配就不能全路徑匹配靶端,而是只需要匹配【?】前部分
請(qǐng)求參數(shù)及請(qǐng)求參數(shù)說(shuō)明:
添加了可視化的JSON編輯器凛膏,方便查看杨名,也可驗(yàn)證數(shù)據(jù)格式正確性
二次代理設(shè)置:
在實(shí)際開發(fā)中,我們常常會(huì)遇到這種情況猖毫,在開發(fā)的前期台谍,數(shù)據(jù)接口的數(shù)據(jù)是模擬的,但是開發(fā)到了中后期吁断,部分真實(shí)的接口已經(jīng)開發(fā)好典唇,就需要以真實(shí)的數(shù)據(jù)來(lái)測(cè)試,在以前只能將整個(gè)mock-server服務(wù)切換到真實(shí)的接口服務(wù)上胯府,但是這樣存在一個(gè)問(wèn)題介衔,就是如果在項(xiàng)目中期,部分接口完成了骂因,部分接口沒(méi)完成炎咖,就比較麻煩,此功能就是指定某個(gè)接口去訪問(wèn)真實(shí)的接口的方法。
二次代理是指將本來(lái)代理到mock-server系統(tǒng)的接口乘盼,再次代理到其他的服務(wù)上
二次代理前綴:是指將此接口的域名指向到你想指向的地址
舉例說(shuō)明
開發(fā)中:
1)某個(gè)AJAX服務(wù),需要模擬,通過(guò)NGINX或其他方法將 [http://127.0.0.1/api]下所有請(qǐng)求,全部指向到本系統(tǒng),
并假定本系統(tǒng)啟動(dòng)后的地址為【http://127.0.0.1:8083】.
2)當(dāng)訪問(wèn)[http://127.0.0.1/api/a.json]時(shí),實(shí)際會(huì)代理到【http://127.0.0.1:8083/api/a.json】
3)當(dāng)訪問(wèn)時(shí),系統(tǒng)會(huì)在數(shù)據(jù)庫(kù)查詢到該接口,并返回模擬數(shù)據(jù)
某個(gè)接口的真實(shí)完成后:
同樣是第三步,可以通過(guò)開啟二次代理,將請(qǐng)求再次代理到真實(shí)的接口上,以此達(dá)到更靈活在模擬數(shù)據(jù)和真實(shí)數(shù)據(jù)切換目的
如:
原本被代理到【http://127.0.0.1:8083/api/a.json】返回的數(shù)據(jù),
通過(guò)設(shè)置二次代理為【http://192.168.0.1:8083】,則會(huì)返回
【http://192.168.0.1:8083/api/a.json】
而為了更靈活的設(shè)置二次代理:
分別開發(fā)了,全站級(jí)二次代理升熊、項(xiàng)目級(jí)二次代理、單個(gè)接口的二次代理
權(quán)重為全站級(jí)二次代理 <項(xiàng)目級(jí)二次代理 <單個(gè)接口的二次代理
注意:如果開啟了二次代理绸栅,在返回接口的最后一個(gè)字段將為[proxyDataSource],值為你實(shí)際請(qǐng)求的接口完整地址级野,以方便實(shí)際使用中,知道自己是訪問(wèn)的模擬數(shù)據(jù)粹胯,還是真實(shí)數(shù)據(jù)
接口返回值及參數(shù)說(shuō)明:
你可以通過(guò)點(diǎn)擊從【從二次代理中獲取數(shù)據(jù),并填充,保存后生效】從你設(shè)置的二次代理中獲取到真實(shí)數(shù)據(jù)蓖柔,達(dá)到類似postman驗(yàn)證數(shù)據(jù)接口正確性的功能
開啟mockjs:
同時(shí),為了更好的模擬數(shù)據(jù)风纠,整合了mockjs况鸣,mockjs官網(wǎng)
header頭信息返回?cái)?shù)據(jù):
除了返回json外,有些時(shí)候還需要返回一些特定的header信息竹观,如登錄的token驗(yàn)證
如此一個(gè)模擬數(shù)據(jù)基本成型.
接口列表:
提供搜索镐捧、復(fù)制、快速開啟關(guān)閉二次代理功能臭增,點(diǎn)擊接口可以直接查看接口返回內(nèi)容
其他的功能:
全局設(shè)置:
全局二次代理前綴:
前面已講過(guò)作用懂酱,此處是設(shè)置一個(gè)全局二次代理,當(dāng)你在項(xiàng)目或添加接口時(shí)沒(méi)有二次代理時(shí)誊抛,就會(huì)使用此二次代理(強(qiáng)烈建議設(shè)置列牺,因?yàn)楫?dāng)你訪問(wèn)一個(gè)在本系統(tǒng)中根本沒(méi)有定義的接口時(shí),如果設(shè)置了此項(xiàng)芍锚,系統(tǒng)依然會(huì)將你訪問(wèn)的接口代理到此處設(shè)置的服務(wù)上昔园,這對(duì)于一些老接口非常有用蔓榄,不用在此系統(tǒng)上并炮,將老接口在此系統(tǒng)上再定義一遍,當(dāng)然從文檔記錄上講甥郑,再定義一遍逃魄,作為接口的文檔記錄是可取的)
header頭信息設(shè)置:
當(dāng)二次代理開啟時(shí),有些時(shí)候澜搅,我們需要將我們請(qǐng)求的header信息傳遞給二次代理的服務(wù)上伍俘,比如:用戶登錄后,需要將登錄的COOKIE傳遞給后端以方便后端驗(yàn)證登錄權(quán)限勉躺。
故需求一個(gè)功能來(lái)設(shè)置哪些header信息傳遞給后端癌瘾,默認(rèn)情況下,啟用黑名單項(xiàng)饵溅,將除了host 和 accept-encoding的其他header信息傳遞給后端妨退。
項(xiàng)目管理:
添加/修改項(xiàng)目
就目前的使用來(lái)看,已基本滿足了我 前后端分離開發(fā)時(shí)的數(shù)據(jù)模擬需求,如果各種有好的建議或意義歡迎給我指問(wèn)咬荷。