最近一直在思考如何對(duì)Web API的其接口數(shù)據(jù)進(jìn)行獨(dú)立開(kāi)發(fā)的問(wèn)題堂污,隨著Web API的越來(lái)越廣泛應(yīng)用亡问,很多開(kāi)發(fā)也要求前端后端分離菱属,例如統(tǒng)一的Web API接口后汞幢,Winform團(tuán)隊(duì)驼鹅、Web前端團(tuán)隊(duì)、微信小程序或者APP團(tuán)隊(duì)大家可以同步開(kāi)發(fā),在最初約定一些接口的輸入JSON數(shù)據(jù)和輸出JSON數(shù)據(jù)输钩,但是隨著項(xiàng)目的進(jìn)度開(kāi)展豺型,這些數(shù)據(jù)結(jié)構(gòu)一直有所變化,那么我們模擬的JSON數(shù)據(jù)格式也需要協(xié)同變化买乃,但是很不幸既然大家忙著開(kāi)發(fā)触创,接口協(xié)調(diào)的事情肯定優(yōu)先級(jí)沒(méi)那么高,即使每次記得協(xié)調(diào)接口數(shù)據(jù)为牍,也不一定能夠完全一致。
在Web API端也就是后端沒(méi)有完全做好的情況下岩馍,我們不可能給出所有接口的輸入輸出JSON格式碉咆,那么我們是否可以考慮采用折中模擬數(shù)據(jù)接口的方式來(lái)提供,并且能夠提供比較易讀蛀恩、易維護(hù)的處理方式呢疫铜?答案是肯定有的,結(jié)合RAP2和Mock.js兩者的特點(diǎn)双谆,可以較為方便的模擬出我們需要接口的URL壳咕、輸入?yún)?shù)、輸出參數(shù)等信息顽馋。
RAP2是一個(gè)Web接口管理工具谓厘,開(kāi)源免費(fèi),接口自動(dòng)化寸谜,MOCK數(shù)據(jù)自動(dòng)生成竟稳,自動(dòng)化測(cè)試,企業(yè)級(jí)管理熊痴。
Mock.js的出現(xiàn)解決了前端離開(kāi)后端就沒(méi)法請(qǐng)求數(shù)據(jù)的問(wèn)題他爸,但也出現(xiàn)了新的問(wèn)題,就是在切換生產(chǎn)環(huán)境的時(shí)候果善,模擬的數(shù)據(jù)可能和接口又發(fā)生不同步的情況诊笤。
RAP2是一個(gè)新的解決方案,將前端后端拉倒一個(gè)團(tuán)隊(duì)倉(cāng)庫(kù)中巾陕,共享一個(gè)倉(cāng)庫(kù)讨跟,無(wú)論是URL地址,還是請(qǐng)求需要的參數(shù)惜论,在團(tuán)隊(duì)倉(cāng)庫(kù)中雙方都可以管理许赃,并且可以記錄團(tuán)隊(duì)成員修改了哪些接口,整合到生產(chǎn)環(huán)境的時(shí)候馆类,可以比較完美的切換混聊,同步性較好!
相關(guān)網(wǎng)站資源:
http://mockjs.com/ mock.js網(wǎng)址
http://rap2.taobao.org/ RAP2網(wǎng)址
https://github.com/thx/rap2-delos RAP2官方文檔
https://github.com/nuysoft/Mock/wiki/Syntax-Specification mock.js語(yǔ)法規(guī)范文檔
1、RAP2創(chuàng)建接口
打開(kāi)網(wǎng)站http://rap2.taobao.org/ 句喜,注冊(cè)一個(gè)用戶(hù)賬號(hào)预愤,并創(chuàng)建自己的模塊和接口,如下所示
默認(rèn)有一個(gè)示例接口指引我們做相關(guān)的參數(shù)或者響應(yīng)內(nèi)容
對(duì)每個(gè)參數(shù)咳胃,都可以使用Mock規(guī)則進(jìn)行生成值植康,如下界面所示
除了示例,我們也可以創(chuàng)建自己的模塊和接口展懈,如下所示我們創(chuàng)建一個(gè)用戶(hù)管理的模塊销睁,以及兩個(gè)接口。
獲取用戶(hù)的接口定義如下所示存崖。
這個(gè)URL地址是我們邏輯上的相對(duì)地址冻记,實(shí)際在使用的時(shí)候,我們加上一個(gè)基地址就可以了来惧,在RAP2 它也是一個(gè)相對(duì)地址冗栗,測(cè)試接口的地址也是加上一個(gè)基礎(chǔ)地址,這樣我們實(shí)際開(kāi)發(fā)的時(shí)候供搀,把這部分基礎(chǔ)地址替換為生產(chǎn)環(huán)境的地址即可順利切換過(guò)去了隅居。
這個(gè)接口實(shí)際返回的JSON數(shù)據(jù)格式就是我們約定好的JSON格式了,如果我們有變化葛虐,大家參考這個(gè)中間的平臺(tái)就可以了胎源,溝通時(shí)比較方便,也可以對(duì)比那些字段參數(shù)變化調(diào)整了挡闰,這樣前后端就有了一個(gè)參考的中間平臺(tái)乒融,一致性較好。
2摄悯、接口參數(shù)定義和Mock變量使用
那么這些JSON數(shù)據(jù)是如何來(lái)的赞季,我們其實(shí)是填寫(xiě)了一些變量,讓它自動(dòng)生成的數(shù)據(jù)的奢驯,這個(gè)也是Mock.js的功勞吧申钩。RAP2集成了MockJS的很多變量使用,參考著使用就可以構(gòu)建很多不一樣的數(shù)據(jù)瘪阁,非常方便撒遣。
下面列出我的一些輸入、輸入的變量?jī)?nèi)容管跺。
輸入的參數(shù)义黎,定義如下:
響應(yīng)的輸出參數(shù)如下定義。
獲得的輸出自動(dòng)生成的JSON數(shù)據(jù)如下所示豁跑。
這個(gè)就是我們使用Mock變量的好處廉涕,自動(dòng)根據(jù)規(guī)則填充,上面我使用了各種變量來(lái)定義數(shù)據(jù),如果你需要了解Mock的變量狐蜕,可以結(jié)合Mock的變量來(lái)測(cè)試即可宠纯。具體參考下面說(shuō)明。
http://mockjs.com/examples.html
上面鏈接列出了Mock的兩項(xiàng)定義:數(shù)據(jù)模板定義和數(shù)據(jù)占位符定義层释,可以根據(jù)情況用不同的定義婆瓜。我更側(cè)向于使用后者,方便快捷贡羔。
RAP2給前后端開(kāi)發(fā)者一種更好更透明的協(xié)同開(kāi)發(fā)方式廉白,一個(gè)負(fù)責(zé)維護(hù)接口、一個(gè)負(fù)責(zé)參考修改調(diào)用乖寒,大家相互配合蒙秒,其樂(lè)融融。
關(guān)于RAP2的功能好像還有很多宵统,不過(guò)我們使用它最主要的目的是解決模擬API接口和協(xié)同性的問(wèn)題,這個(gè)大原則是它的主要目的覆获,基于RAP2和Mock.js的結(jié)合马澈,我們可以解放頻繁溝通而得不到接口一致性問(wèn)題的問(wèn)題,從而實(shí)現(xiàn)更好從調(diào)試環(huán)境到生產(chǎn)環(huán)境的切換弄息。
甚至更好的方案是我們 在Web API接口開(kāi)發(fā)的初期痊班,先花點(diǎn)功夫來(lái)定義好所有的接口輸入輸出,整理一個(gè)大家認(rèn)為比較好的接口規(guī)范后摹量,再開(kāi)始Web API的編碼涤伐,這樣肯定后期開(kāi)發(fā)是事半功倍,而且前端也可以很快對(duì)接缨称。