前后端分離-獨(dú)立于后端的前端開(kāi)發(fā)

題目:前后端分離-獨(dú)立于后端的前端開(kāi)發(fā)
簡(jiǎn)介:如何構(gòu)建 Web 前端 Mock Server

前后端分離
真實(shí)數(shù)據(jù)模擬
接口測(cè)試

前后端分離
讓前端攻城師獨(dú)立于后端進(jìn)行開(kāi)發(fā)。 增加單元測(cè)試的真實(shí)性
通過(guò)隨機(jī)數(shù)據(jù),模擬各種場(chǎng)景。 開(kāi)發(fā)無(wú)侵入
不需要修改既有代碼,就可以攔截 Ajax 請(qǐng)求坐昙,返回模擬的響應(yīng)數(shù)據(jù)杭棵。 用法簡(jiǎn)單
符合直覺(jué)的接口客年。 數(shù)據(jù)類型豐富
支持生成隨機(jī)的文本坊罢、數(shù)字烤黍、布爾值知市、日期傻盟、郵箱、鏈接嫂丙、圖片娘赴、顏色等。 方便擴(kuò)展

  • 相對(duì)于其他同類的框架的實(shí)現(xiàn)跟啤,mock.js超出了我的意料诽表。
    • 基于 數(shù)據(jù)模板 生成模擬數(shù)據(jù)。
    • 基于 HTML模板 生成模擬數(shù)據(jù)隅肥。
    • 攔截并模擬 ajax 請(qǐng)求竿奏。
  • 是的,mock.js只做上述的幾件事腥放,但做的足夠出色泛啸。
    解決的問(wèn)題
    開(kāi)發(fā)時(shí),后端還沒(méi)完成數(shù)據(jù)輸出秃症,前端只好寫靜態(tài)模擬數(shù)據(jù)。
  • 數(shù)據(jù)太長(zhǎng)了种柑,將數(shù)據(jù)寫在js文件里,完成后挨個(gè)改url赔蒲。
  • 某些邏輯復(fù)雜的代碼,加入或去除模擬數(shù)據(jù)時(shí)得小心翼翼良漱。
  • 想要盡可能還原真實(shí)的數(shù)據(jù)舞虱,要么編寫更多代碼母市,要么手動(dòng)修改模擬數(shù)據(jù)矾兜。
  • 特殊的格式患久,例如IP,隨機(jī)數(shù)椅寺,圖片,地址蒋失,需要去收集返帕。
  • 超爛的破網(wǎng)速…

配置模擬數(shù)據(jù):
Mock.mock('http://g.cn', {
'name' : '@name',
'age|1-100': 100,
'color' : '@color'
});
發(fā)送Ajax請(qǐng)求:
$.ajax({
url: 'http://g.cn',
dataType:'json'
}).done(function(data, status, xhr){
console.log(
JSON.stringify(data, null, 4)
)
})篙挽;
返回?cái)?shù)據(jù):
// 結(jié)果1
{
"name": "Elizabeth Hall",
"age": 91,
"color": "#0e64ea"
}

// 結(jié)果2
{
"name": "Michael Taylor",
"age": 61,
"color": "#081086"
}

語(yǔ)法
Mock.js 的語(yǔ)法規(guī)范包括兩部分:

  1. 數(shù)據(jù)模板定義(Data Temaplte Definition,DTD)
  2. 數(shù)據(jù)占位符定義(Data Placeholder Definition链韭,DPD)
    數(shù)據(jù)模板定義 DTD
    數(shù)據(jù)模板中的每個(gè)屬性由 3 部分構(gòu)成:屬性名、生成規(guī)則敞峭、屬性值:
    // 屬性名 name
    // 生成規(guī)則 rule
    // 屬性值 value
    'name|rule': value
    注意:
  • 屬性名 和 生成規(guī)則 之間用 | 分隔。

  • 生成規(guī)則 是可選的旋讹。

  • 生成規(guī)則 有 7 種格式:

    1. 'name|min-max': value
    2. 'name|count': value
    3. 'name|min-max.dmin-dmax': value
    4. 'name|min-max.dcount': value
    5. 'name|count.dmin-dmax': value
    6. 'name|count.dcount': value
    7. 'name|+step': value
  • 生成規(guī)則 的 含義 需要依賴 屬性值 才能確定。

  • 屬性值 中可以含有 @占位符沉迹。

  • 屬性值 還指定了最終值的初始值和類型。
    生成規(guī)則和示例:

  1. 屬性值是字符串 String

  2. 'name|min-max': 'value' 通過(guò)重復(fù) 'value' 生成一個(gè)字符串胚股,重復(fù)次數(shù)大于等于 min,小于等于 max缨伊。

  3. 'name|count': 'value' 通過(guò)重復(fù) 'value' 生成一個(gè)字符串进宝,重復(fù)次數(shù)等于 count。

  4. 屬性值是數(shù)字 Number

  5. 'name|+1': 100 屬性值自動(dòng)加 1党晋,初始值為 100

  6. 'name|1-100': 100 生成一個(gè)大于等于 1、小于等于 100 的整數(shù)灾而,屬性值 100 只用來(lái)確定類型扳剿。

  7. 'name|1-100.1-10': 100 生成一個(gè)浮點(diǎn)數(shù)旁趟,整數(shù)部分大于等于 1庇绽、小于等于 100,小數(shù)部分保留 1 到 10 位耕餐。
    {

  8. 'number1|1-100.1-10': 1,
    
  9. 'number2|123.1-10': 1,
    
  10. 'number3|123.3': 1,
    
  11. 'number4|123.10': 1.123
    
  12. }
    
  13. // =>
    
  14. {
    
  15. "number1": 12.92,
    
  16. "number2": 123.51,
    
  17. "number3": 123.777,
    
  18. "number4": 123.1231091814
    
  19. }
    
  20. 屬性值是布爾型 Boolean

  21. 'name|1': value 隨機(jī)生成一個(gè)布爾值辟狈,值為 true 的概率是 1/2,值為 false 的概率是 1/2。

  22. 'name|min-max': value 隨機(jī)生成一個(gè)布爾值桩砰,值為 value 的概率是 min / (min + max)释簿,值為 !value 的概率是 max / (min + max)。

  23. 屬性值是對(duì)象 Object

  24. 'name|min-max': {} 從屬性值 {} 中隨機(jī)選取 min 到 max 個(gè)屬性煮纵。

  25. 'name|count': {} 從屬性值 {} 中隨機(jī)選取 count 個(gè)屬性偏螺。

  26. 屬性值是數(shù)組 Array

  27. 'name|1': [{}, {} ...] 從屬性值 [{}, {} ...] 中隨機(jī)選取 1 個(gè)元素,作為最終值套像。

  28. 'name|min-max': [{}, {} ...] 通過(guò)重復(fù)屬性值 [{}, {} ...] 生成一個(gè)新數(shù)組酿联,重復(fù)次數(shù)大于等于 min夺巩,小于等于 max。

  29. 'name|count': [{}, {} ...] 通過(guò)重復(fù)屬性值 [{}, {} ...] 生成一個(gè)新數(shù)組喳张,重復(fù)次數(shù)為 count美澳。

  30. 屬性值是數(shù)組 Function
    'name': function(){} 執(zhí)行函數(shù) function(){},取其返回值作為最終的屬性值制跟,上下文為 'name' 所在的對(duì)象舅桩。
    數(shù)據(jù)占位符定義 DPD
    占位符 只是在屬性值字符串中占個(gè)位置雨膨,并不出現(xiàn)在最終的屬性值中。占位符 的格式為:
    @占位符
    @占位符(參數(shù) [, 參數(shù)])
    注意:

  31. 用 @ 來(lái)標(biāo)識(shí)其后的字符串是 占位符歼指。

  32. 占位符 引用的是 Mock.Random 中的方法甥雕。

  33. 通過(guò) Mock.Random.extend() 來(lái)擴(kuò)展自定義占位符。

  34. 占位符 也可以引用 數(shù)據(jù)模板 中的屬性社露。

  35. 占位符 會(huì)優(yōu)先引用 數(shù)據(jù)模板 中的屬性
    {

  36. name: {

  37. first: '@FIRST',

  38. middle: '@FIRST',

  39. last: '@LAST',

  40. full: '@first @middle @last'

  41. }
    
  42. }

  43. // =>

  44. {

  45. "name": {

  46. "first": "Charles",

  47. "middle": "Brenda",

  48. "last": "Lopez",

  49. "full": "Charles Brenda Lopez"

  50. }
    
  51. }

常用方法
Mock.mock( rurl?, rtype?, template|function(options) )
根據(jù)數(shù)據(jù)模板生成模擬數(shù)據(jù)。
參數(shù)的含義和默認(rèn)值如下所示:

  • 參數(shù) rurl:可選附鸽。表示需要攔截的 URL,可以是 URL 字符串或 URL 正則坷备。例如 //domain/list.json/、'/domian/list.json'赌蔑。
  • 參數(shù) rtype:可選。表示需要攔截的 Ajax 請(qǐng)求類型娃惯。例如 GET肥败、POST、PUT馒稍、DELETE 等。
  • 參數(shù) template:可選往史。表示數(shù)據(jù)模板佛舱,可以是對(duì)象或字符串。例如 { 'data|1-10':[{}] }请祖、'@EMAIL'。
  • 參數(shù) function(options):可選刷晋。表示用于生成響應(yīng)數(shù)據(jù)的函數(shù)慎陵。
  • 參數(shù) options:指向本次請(qǐng)求的 Ajax 選項(xiàng)集。
    Mock.mockjax(library)
    覆蓋(攔截) Ajax 請(qǐng)求捏悬,目前內(nèi)置支持 jQuery润梯、Zepto甥厦、KISSY寇钉。
    Mock.Random
    Mock.Random 是一個(gè)工具類,用于生成各種隨機(jī)數(shù)據(jù)扫倡。Mock.Random 的方法在數(shù)據(jù)模板中稱為“占位符”,引用格式為 @占位符(參數(shù) [, 參數(shù)]) 油够。
    Mock.tpl(input, options, helpers, partials)
    基于 Handlebars征懈、Mustache 的 HTML 模板生成模擬數(shù)據(jù)揩悄。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市亏娜,隨后出現(xiàn)的幾起案子蹬挺,更是在濱河造成了極大的恐慌,老刑警劉巖巴帮,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件榕茧,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡用押,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門池充,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)缎讼,“玉大人,你說(shuō)我怎么就攤上這事咱圆。” “怎么了序苏?”我有些...
    開(kāi)封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵忱详,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我匈睁,道長(zhǎng),這世上最難降的妖魔是什么胀蛮? 我笑而不...
    開(kāi)封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任糯钙,我火速辦了婚禮,結(jié)果婚禮上再榄,老公的妹妹穿的比我還像新娘享潜。我一直安慰自己,他們只是感情好剑按,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布吕座。 她就那樣靜靜地躺著,像睡著了一般吴趴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上厢拭,一...
    開(kāi)封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天撇叁,我揣著相機(jī)與錄音,去河邊找鬼楞捂。 笑死薄坏,一個(gè)胖子當(dāng)著我的面吹牛寨闹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播沈善,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼椭蹄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了罩润?” 一聲冷哼從身側(cè)響起埋酬,我...
    開(kāi)封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后审姓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扎筒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年嗜桌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辞色。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡层亿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出立美,到底是詐尸還是另有隱情,我是刑警寧澤建蹄,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站痛单,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蔫巩。R本人自食惡果不足惜快压,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蔫劣。 院中可真熱鬧,春花似錦歪沃、人聲如沸嫌松。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至缘眶,卻和暖如春髓废,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背慌洪。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工蒋譬, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人犯助。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像惠爽,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子婚肆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理较性,服務(wù)發(fā)現(xiàn),斷路器赞咙,智...
    卡卡羅2017閱讀 134,601評(píng)論 18 139
  • 在很早以前公司里面就接入了rap在線管理接口文檔平臺(tái)攀操,通過(guò)圖形化書寫接口文檔,給前端同事使用速和。但是之前也僅僅是用于...
    云楓隨筆閱讀 3,661評(píng)論 0 2
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 10,871評(píng)論 6 13
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,748評(píng)論 6 342
  • 每當(dāng)夜深人靜的時(shí)候 總有一個(gè)身影在心中徘徊 這是曾經(jīng)失去的愛(ài) 還是思念在悄悄作怪 每當(dāng)夜深人靜的時(shí)侯 總有一個(gè)身影...
    閑不語(yǔ)閱讀 442評(píng)論 1 2