最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

前端福音:我見過的最強 Mock 工具,沒有之一!

2022-04-06 10:41 作者:Apifox  | 我要投稿



前端的痛苦

作為前端,最痛苦的是什么時候?

每個迭代,需求文檔跟設計稿都出來了,靜態(tài)頁面唰唰兩天就做完了。可是做前端又不是簡單地把后端吐出來的數(shù)據(jù)放到頁面上就完了,還有各種前端處理邏輯啊。

后端接口還沒出來,我就得邊寫代碼邊測前端效果,又沒有真實數(shù)據(jù)。有人建議用 Mock 工具,可是每個接口都要自己寫 Mock 規(guī)則,這得浪費多少時間呀。

等到后端好不容易把接口寫出來了,一對接聯(lián)調(diào),好多字段的數(shù)據(jù)又跟我 Mock 的數(shù)據(jù)對不上,又得重新改代碼。

每個迭代都是一場折磨。

就是那種,明明知道這個地方整個團隊都可以更有效率,但偏偏就是做不到的無力感

黎明的希望

直到有一天,我遇到這個神器。我的效率提升了 100%。

我可以用最省力最優(yōu)雅的方式得到我需要的 Mock 數(shù)據(jù),甚至不需要任何配置。而且,聯(lián)調(diào)時候曾經(jīng)遇到的各種令人崩潰的前后端數(shù)據(jù)對接問題,統(tǒng)統(tǒng)不!見!了!

就是這個??

Apifox

我研究了整整一周,越研究越是心驚。這個工具太強大,完全超出我的預期,就如《倚天屠龍記》里張無忌修煉的乾坤大挪移,練完一層,上面還有一層,每一層都是一片全新的天地。

我曾經(jīng)以為,定接口什么的你們后端定就行了,跟我前端有什么關系。定好了吐數(shù)據(jù)給我就行了。

我曾經(jīng)以為,寫接口文檔什么的完全是浪費時間,邊寫代碼邊改接口不好嘛。

直到我遇到這個神器,我才明白好的工作習慣能給我提升多少效率。

現(xiàn)在的我已經(jīng)不一樣了。我認為這款神器能夠把全中國前端程序員的工作效率都提升一倍。我也希望在讀這篇文章的你,能夠好好把這款工具用起來。

以下還有 3000 字,閱讀時長 5~10 分鐘。如果你嫌讀文字太麻煩,這里也有個視頻,內(nèi)容是一樣的。

好,接下來我要發(fā)功了。

第一層:智能 Mock

Apifox 是個 API 協(xié)作工具,用它來做 Mock 數(shù)據(jù)的基礎也是 API 文檔。在 Apifox 里維護的 API 可以生成好看的在線接口文檔,也可以像 Postman 那樣一鍵調(diào)試,像 JMeter 那樣做測試,還可以直接 Mock 數(shù)據(jù)。不過今天我們只聊?Mock。

首先,你需要在 Apifox 里面創(chuàng)建一個接口,定義好請求參數(shù)返回數(shù)據(jù)結構。

好了,保存。完成!

……………………

等會兒?Mock 呢?怎么就完成了?Mock 規(guī)則在哪兒寫?

真的就完成了。

Apifox 會自動啟動一個本地的 Mock 服務,我復制一下 Apifox 自動生成的 Mock 地址,用瀏覽器打開看下效果。

Apifox 本地 Mock 服務

就是這么簡單!就是這么方便!

什么!都不需要!配置!

其實我們遇到的大部分 API 返回數(shù)據(jù)都是通用的,用戶名、手機號、地址、郵箱、時間戳,等等等等。但是你要去寫 Mock 規(guī)則就很麻煩。你要怎么生成一個看起來合理的中國人名?

在 Apifox 里面,這變成了最簡單的事情,甚至是完全無感的。只要寫 API 文檔的時候把返回的數(shù)據(jù)結構定義好,這個事情就完成了。Apifox 會根據(jù)字段名稱智能生成 Mock 數(shù)據(jù),不需要任何配置

如接口返回的數(shù)據(jù)結構里某個字段名稱叫username就會得到“程敏”“王寧”“安慕希”“李瑪璧”。

字段名稱叫phone,就會得到15237829132、18907284633

字段名稱叫city,就會得到杭州市高雄市、博爾塔拉蒙古自治州。

甚至如果你的字段名稱叫icon,就會返回一個圖片 URL,打開就真的是一張 png 圖片!

如果你們團隊使用的是 Swagger 等其他工具管理 API 文檔,也可以導入到 Apifox(Apifox 支持 20 多種格式數(shù)據(jù)導入,還可以設置定時自動導入),一樣可以使用這個智能 Mock,一樣是零配置自動生成所有 Mock 數(shù)據(jù)。

完全不用操心任何 Mock 數(shù)據(jù)配置的問題,只要接口定好了,Mock 數(shù)據(jù)就有了,我什么前端代碼都能寫。

第二層:自定義智能 Mock 規(guī)則

有的同學問,你這個都是預設死的吧?我怎么知道寫什么參數(shù)名稱你會給我 Mock 出什么數(shù)據(jù)來?好,這就是 Apifox Mock 功能的第二層:自定義智能 Mock 規(guī)則。

在 Apifox 里面內(nèi)置了一整套 Mock 規(guī)則,當我們的返回字段名匹配上了其中的某條規(guī)則,就會根據(jù)對應規(guī)則生成隨機值(Mock.js 語法規(guī)則)。

Apifox 內(nèi)置智能 Mock 規(guī)則

字段名稱的匹配方式支持通配符和正則表達式,比如字段只要以 “url” 結尾,就會得到一個正確的網(wǎng)址;以 “mail” 打頭,就會得到一個郵箱地址。

要是以 “time” 結尾,那還會自動根據(jù)字段的數(shù)據(jù)類型來 Mock 值:string 類型的話就返回一個 'yyyy-mm-dd hh:mm:ss' 格式時間;integer 類型的話就返回一個時間戳。是不是很智能?!

有內(nèi)置規(guī)則,當然就可以自定義新規(guī)則。

比如我們公司的訂單 id 是以 “DD” 打頭的十位數(shù)字,我就可以新建一個 string 類型的規(guī)則,匹配規(guī)則寫 “*orderid” , mock 規(guī)則寫一個正則表達式:@regexp(/DD\d{10}/)。這樣,只要我任何一個接口返回字段是以 “orderid” 結尾,都會得到一個 “DD1284918414” 這樣的返回值。

第三層:返回字段高級設置

有的同學說,你這個是比較通用的數(shù)據(jù)類型,可我還有很多沒那么通用的類型,比如寵物店上架的寵物,有三種狀態(tài):可售、已售、待上架,要怎么 Mock 出來?

在 Apifox 里面,定義接口返回數(shù)據(jù)結構的時候每個字段都有一個“高級設置”的概念。比如我寵物的上架狀態(tài)還可以定義為枚舉,枚舉可選值為(“available”,“sold”,“pending”)。如果接口這樣定義了,那么 Mock 就會自動從這三個字符串里取值。

返回字段高級設置

這個字段高級設置里不止有枚舉,還可以設置長度范圍、正則規(guī)則等。如果字段類型是數(shù)字,還可以設置最大值最小值等。

如果你對 JSON Schema 比較熟的話,也可以直接寫 Schema,那可定義空間就更大了。

而且我們要注意:這個時候我們設的其實不是 Mock 規(guī)則,而是接口返回值的數(shù)據(jù)結構定義,這個是會對接口調(diào)試的自動校驗功能生效的,如果后端接口返回的數(shù)據(jù)不符合這里的設置,Apifox 會返回一個“數(shù)據(jù)結構校驗失敗”,就告訴后端你接口返回數(shù)據(jù)結構不對。

而我們的 Mock 數(shù)據(jù)也是根據(jù)這里的設置自動生成,不需要任何額外配置。

懟后端專用圖

爽不爽,可以直接甩一張截圖去懟后端了。

第四層:接口級自定義 Mock

有的同學說,那我還有一種場景,比如我這個用戶名字段,數(shù)據(jù)定義里其實是允許他輸入任意字符串的,可是我 Mock 是需要一個真實姓名的,不能靠字段定義啊。

而且,你剛才演示的都是中國人名,我的客戶都是歐美人怎么辦。

啊,終于要針對特定接口設置一點點規(guī)則了。

可選的 Mock 規(guī)則

在 Apifox 里,給接口定義數(shù)據(jù)結構的時候是可以給每個字段設置 Mock 規(guī)則的,而且直接就可以選一系列的常用 Mock 規(guī)則,常見的各種數(shù)據(jù)類型其實都齊全了。比如我需要一個外文人名,我就可以在這里寫 @name,運行一下就會得到 “Larry Smith” “Susan Lee” 這樣的英文名。

如果前面說的智能 Mock 滿足不了你,在這里設置規(guī)則就可以覆蓋掉內(nèi)置規(guī)則。這里支持 Mock.js 和正則表達式,只要你能想到的規(guī)則,全都 Mock 得出來。

Mock 規(guī)則參考

而且 Apifox 支持?數(shù)據(jù)模型(Schema)?定義,不同的接口可以復用相同的數(shù)據(jù)模型,模型里定義的規(guī)則在所有引用它的接口里都會生效,不需要任何額外的配置。

一次 Mock,終身享受。

第五層:高級 Mock

還有那么一些同學,他們說,希望能讓我自己定義:根據(jù)不同的參數(shù)值,返回不同的數(shù)據(jù)。

比如我請求的參數(shù)寵物ID??1?就返回一個在售的寵物數(shù)據(jù),如果寵物ID??2?就返回一個已售的寵物數(shù)據(jù)。我前端可以把幾種狀態(tài)的頁面都做出來。

好吧,Apifox mock 的第五層就是為你準備的。

在 Apifox 的“接口管理” 有一個 “高級 Mock” 標簽頁。在這里我們可以添加“期望”。

Apifox 高級 Mock

一個期望就是指當你的請求包含某個參數(shù)值的時候,就返回特定的數(shù)據(jù)。

比如我設定我的1號寵物是在售的,2號寵物是已售出的,3號寵物是記錄不存在的,DDD 號寵物是“ ID 格式不正確”的。我把這些返回值都設好。

之后,我發(fā)送的請求參數(shù)是1的時候,就返回一個在售的寵物信息;2返回一個已售的;3返回一個“404 not found”,4返回一個“Invalid Param”。

啊,簡直能模擬出來一個后端服務器了!

我就是那個 ID 格式不正確的寵物

第六層:高級 Mock 模板語法

你覺得這個 Mock 功能已經(jīng)非常強大了是吧。我最開頭提了張無忌,你知道張無忌的乾坤大挪移總共有幾層嗎?

我們進入高級 Mock 寫期望的時候,鼠標放在這個支持 “Mock.js 語法”上會浮出來一段示例。

這個示例是講什么的呢?我們可以在 Apifox 里面實際運行一下試試。

它生成了一個 JSON 格式的數(shù)組!

總共有 20 組 id 和名字,比如你在前端要生成一個填滿數(shù)據(jù)的二維表格,一次就能 Mock 一整套!只需要短短幾行代碼!

我們回來看這個語法示例,正常的 JSON 里面插入了大括號百分號包裹的兩段 “for” 代碼,它就是 JS 模板語法(Nunjucks語法),可以使用它來生成復雜的數(shù)據(jù)結構!

不但支持 for 循環(huán)!還支持 if 分支!還支持正則表達式!還支持調(diào)用函數(shù)!

你說!是不是有我(加上 Apifox)就夠了!還要后端做什么!

第七層:高級 Mock 自定義腳本

還有???

這是最新的 Apifox 2.1.7 才有的強大功能。

新版本的高級 Mock 增加了一個“腳本”的 Tab,這個高級 Mock 自定義腳本是做什么用的呢?

我們來考慮一個實際的案例。我有一個“查詢寵物列表”的 GET 接口,它的請求參數(shù)是 page 和 pageSize,取值是 6 和 10,含義就是我要查寵物列表的第 6 頁,每頁限定 10 條記錄。這是個很常見的翻頁場景。

返回數(shù)據(jù)首先是一個數(shù)組,每一條是我查出來的這一頁的一個寵物。下面還有一個 page 和 total,也就是當前頁碼和總計多少條記錄。請求一下,返回的 Mock 數(shù)據(jù)就是一系列的寵物信息。

到下面的 page 字段,出現(xiàn)問題了:我請求的明明請求的是第 6 頁的數(shù)據(jù),你給我返回 page 是第 10 頁算什么意思。

再翻翻頁,新的問題又出現(xiàn)了:剛才還是總共 25 頁呢,我一翻頁就變成總共 40 頁了???而且第 10 頁的下一頁是 22 頁?

我希望 Mock 出來的數(shù)據(jù)是什么樣的呢?應該是我請求的是第幾頁,返回來的數(shù)據(jù)就是第幾頁;然后總頁數(shù)應該是固定的,不會因為我翻前翻后就變。

這時候我們就需要高級 Mock 的自定義腳本了。

在自定義腳本界面的右側有一段示例代碼,我們仔細讀一下。

  1. 通過?fox.mockResponse.json()?獲取系統(tǒng)自動生成的 JSON 數(shù)據(jù),賦值給變量 responseJson。

  2. 通過?fox.mockRequest.getParam('page')?獲取實際請求參數(shù) page,賦值給變量 responseJson 里的 page 字段。

  3. 把 responseJson 的 total 字段重寫為 120。

  4. 通過?fox.mockResponse.setBody(responseJson)?把修改后的變量 responseJson 設置到的 mockResponse 里面,這樣就修改了系統(tǒng)返回的 JSON 數(shù)據(jù)。

這樣,我請求的是第幾頁,返回的就也是對應的第幾頁,然后總頁數(shù)是保持 12 不變(120 除以每頁 10 個)。

這個自定義腳本就可以做很多事情了,比如我需要根據(jù)用戶的性別是男是女 Mock 出返回的不同頭像;或者先 Mock 出出生日期,然后用出生日期拼裝成對應的身份證號等等,可以讓我們 Mock 出來的數(shù)據(jù)彼此吻合。

自定義腳本可以操作的對象就是這個?fox.mockRequest??fox.mockResponse,可以獲取請求參數(shù)、Header、Cookie,修改響應 Body、HTTP 狀態(tài)碼等,甚至響應的延時都可以自定義。

你就說牛不牛吧!

趕緊去下載吧

Apifox Mock 功能的七層天梯,打完收功。

如果你是個前端,并且讀到了這里,我覺得你應該鼓一下掌。

Apifox 的 Mock 功能完全值得你點一下閱讀原文然后去下載。其他的 API 和 Mock 工具你全都可以扔掉了。

記得要下載Apifox桌面版使用,WEB 版目前還不支持 Mock 功能。

最后提醒一下,Mock 只是 Apifox 的功能中的一小部分。Apifox = Postman + Swagger + Mock + Jmeter,它的功能遠不止這篇文章里的這些。



前端福音:我見過的最強 Mock 工具,沒有之一!的評論 (共 條)

分享到微博請遵守國家法律
成安县| 抚远县| 三穗县| 江山市| 遵义市| 武冈市| 卢龙县| 十堰市| 潼关县| 庆安县| 连南| 雷州市| 皮山县| 德阳市| 志丹县| 门头沟区| 信丰县| 哈密市| 商河县| 介休市| 崇仁县| 财经| 页游| 清苑县| 甘洛县| 焉耆| 中西区| 镇平县| 铜鼓县| 香格里拉县| 调兵山市| 磐安县| 扶风县| 仁寿县| 鄢陵县| 巴南区| 新津县| 诸城市| 邻水| 平和县| 文登市|