如何優雅的使用Mock Server

事出有因

昨天跟同事討論我們在用的rap2(一個集接口編寫和mock server的開源項目)和剛上線了一個easy-mock的server,到底哪個好用。

我們主要討論的點有個兩個: 接口的一致性、 編碼的無侵入性。

背景

自從前后端分離后,完成前后端的分工之后,大家就可以各司其職,并行開發。前后端的協議標準就是接口文檔。前端的所有邏輯和展現全部依賴接口文檔中規定的數據結構。所以接口文檔就變成了開發過程的重中之重。

當然有一份文檔也是不夠的,前端開發頁面邏輯調試、測試同學測試接口、接口文檔不斷的更新、接口復雜的返回情況等諸多問題,這就需要有一個Mock Server來幫忙。

更多的關于Mock內容的請大家自行Google了解不再贅述。

接口的一致性

接口文檔,是整個開發過程中的約定和依據,所以同步更新文檔也成為關鍵一環。

之前的辦法

使用markdown維護一個文檔,更新之后分發給大家;或者就是放到wiki來管理,每次更新到wiki上面,供大家來閱讀。如果要Mock數據(easy-mock或者其他mock server),相關人員修改mock字段,更新完畢。

優雅的做法

在線編輯接口,實時保存,同步更新。例如采用Rap2(支持JSON復制,支持接口的移動復制),保存后就是接口文檔,所有人實時更新,同時Mock數據自動更新。

編碼的無侵入性

Mock 對代碼的侵入越小,我們維護和開發的成本也越低。以 Vue-cli2.x生成的項目為例:

在工程中的config目錄dev.env.js,配置開發環境下API數據來源地址

...
module.exports = merge(prodEnv, {NODE_ENV: '"development"',ENV_CONFIG: '"dev"',// BASE_API: '"dev server"',BASE_API: '"http://rap2.taobao.org:8080/app/mock/39"', // mock server
})

這樣我們在開發過程中,用到axios,只需要根據不同環境編寫一次代碼即可

const service = axios.create({baseURL: process.env.NODE_ENV === 'production' ? process.env.BASE_API : '/api',...
});

從Mock數據切換到Dev Server的API只需要注釋一行配置文件代碼,無需修改項目源代碼。非常友好。

這時候我們再看easy-mock 跟rap2生成的Mock Url:

http://easy-mock.com/mock/5c08e554bd9f9c3a01c5abf6/api/info
=> host/mock/projectId/:pathhttp://rap2.taobao.org:8080/app/mock/45/GET/api/info 
=> host/app/mock/:repositoryId/:method/:path
復制代碼

ps:后來發現rap2的url可以不帶method,但是就是不能使用restful API這種根據method區分的接口了。

從生成的url來看,rap2中有:method的變量,若是要無縫切換需要更多的工作。無法直接替換BASE_API。如果在代碼里拼接會有很大的代碼侵入性。

所以考慮在工程層面進行優化:

在工程目錄config目錄中index.js中,可以設置代理來統一處理:method變量。在proxyTable對象中加入bypass方法,對每個通過代理的接口,處理request url成為一個合格的rap2 mock的url。

module.exports = {dev: {...proxyTable: {'/api': {target: config.BASE_API.substring(1, config.BASE_API.length - 1),changeOrigin: true,pathRewrite: {'^/api': '/'},bypass: function (req, res, proxyOptions) {if (proxyOptions.target.indexOf('mock') !== -1) {const path = req.url.replace(proxyOptions.context, proxyOptions.context + '/' + req.method);// path => /api/GET/pathreq.url = path;}}}},

這樣就能無侵入性的使用rap2了。

結論

從接口文檔的一致性和編碼的無侵入性來看,rap2可能更優一點,但是rap2畢竟是一個年輕的開源項目,很多機制并不完善。從去年年初使用rap2,最近升級到新版本數據庫表結構還要做映射調整,適合喜歡折騰的人。這樣easy-mock的穩定性優勢就值得考慮。

在我看來,未來的Mock Server不單單只是一個Mock,肯定是集 接口編寫 + 自動Mock于一身的,還有一些類似接口字段校驗的輔助功能。

個人還是很看好rap2的,畢竟從rap1重構的項目,有一定的使用背景,重構應該能出更好的開源項目。

再次感謝開源項目對開發者帶來的便利。

最后感謝每一個認真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:【文末領取】


? ? ?【下面是我整理的2023年最全的軟件測試工程師學習知識架構體系圖+全套資料】


一、Python編程入門到精通


二、接口自動化項目實戰?

三、Web自動化項目實戰


四、App自動化項目實戰?

五、一線大廠簡歷


六、測試開發DevOps體系?

七、常用自動化測試工具


八、JMeter性能測試?

九、軟件測試全套資料

十、總結(文末尾部小驚喜)

生命不息,奮斗不止。每一份努力都不會被辜負,只要堅持不懈,終究會有回報。珍惜時間,追求夢想。不忘初心,砥礪前行。你的未來,由你掌握!

生命短暫,時間寶貴,我們無法預知未來會發生什么,但我們可以掌握當下。珍惜每一天,努力奮斗,讓自己變得更加強大和優秀。堅定信念,執著追求,成功終將屬于你!

只有不斷地挑戰自己,才能不斷地超越自己。堅持追求夢想,勇敢前行,你就會發現奮斗的過程是如此美好而值得。相信自己,你一定可以做到!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/38056.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/38056.shtml
英文地址,請注明出處:http://en.pswp.cn/news/38056.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【計算機視覺|生成對抗】條件生成對抗網絡(CGAN)

本系列博文為深度學習/計算機視覺論文筆記,轉載請注明出處 標題:Conditional Generative Adversarial Nets 鏈接:[1411.1784] Conditional Generative Adversarial Nets (arxiv.org) 摘要 生成對抗網絡(Generative Adversarial…

Windows 11 家庭中文版找不到組策略文件gpedit.msc

最近因為調整日期問題需要用到組策略文件gpedit.msc,但是發現找不到文件 在按鍵盤 winR 打開運行界面輸入 gpedit.msc 回車 Windows找不到文件’gpedit.msc’。請確定文件名是否正確后,再試-次。 檢查電腦Windows系統版本 是 Windows 11 家庭中文版 果斷早網上搜…

C++模板元編程入門案例

C++模板元編程(Template Metaprogramming)是一種在編譯時進行計算和代碼生成的技術,它使用C++的模板機制來實現。 下面是一個簡單的C++模板元編程的示例,展示了如何在編譯時計算一個數的階乘。 #include <iostream> template <int N> struct Factorial { …

docker 學習--02 常用命令

docker 學習–02 常用命令 文章目錄 docker 學習--02 常用命令1. 幫助啟動類命令1.1啟動docker1.2 停止docker1.3 重啟docker1.4 查看docker1.5 設置開機自啟1.6 查看docker概要信息1.7 查看docker總體幫助文檔1.8 查看docker命令幫助文檔 2. 鏡像命令2.1 列出本地主機上有的鏡…

Jmeter 參數化的幾種方法

目錄 配置元件-用戶自定義變量 前置處理器-用戶參數 配置元件-CSV Data Set Config Tools-函數助手 配置元件-用戶自定義變量 可在測試計劃、線程組、HTTP請求下創建用戶定義的變量 全局變量&#xff0c;可以跨線程組調用 jmeter執行的時候&#xff0c;只獲取一次&#xff0…

kafka 02——三個重要的kafka客戶端

kafka 02——三個重要的kafka客戶端 1. 前言1.1 關于 Kafka 的安裝1.2 常用客戶端簡介1.3 依賴 2. AdminClient2.1 Admin Configs2.2 AdminClient API2.2.1 設置 AdminClient 對象2.2.2 創建 topic 獲取 topic 列表2.2.3 刪除topic2.2.4 查看 topic 的描述信息2.2.5 查看 topi…

【復習8-13天】每天40min,我們一起用70天穩扎穩打學完《JavaEE初階》——14/70 第十四天

專注 效率 記憶 預習 筆記 復習 做題 歡迎觀看我的博客,如有問題交流,歡迎評論區留言,一定盡快回復!(大家可以去看我的專欄,是所有文章的目錄)   文章字體風格: 紅色文字表示:重難點★? 藍色文字表示:思路以及想法★?   如果大家覺得有幫助的話,感謝大家幫忙 點…

【騰訊云 TDSQL-C Serverless 產品體驗】基于TDSQL-C 存儲爬取的QQ音樂歌單數據

【騰訊云 TDSQL-C Serverless 產品體驗】基于TDSQL-C 存儲爬取的QQ音樂歌單數據 文章目錄 【騰訊云 TDSQL-C Serverless 產品體驗】基于TDSQL-C 存儲爬取的QQ音樂歌單數據前言出現的背景一、TDSQL-C數據庫是什么&#xff1f;二、TDSQL-C 的特點三、TDSQL-C的應用場景四、基于TD…

測試相關Liunx基礎知識

Linux的歷史和安裝 基本常識 Liunx目錄結果 常見

CTF之逆向之阿里巴巴

題目地址&#xff1a;http://www.shiyanbar.com/ctf/13 題目預覽&#xff1a; 解題過程&#xff1a; 1、下載附件發現是exe文件 2、使用PEid和Detect It Easy查殼 和 開發語言&#xff0c;發現沒有加殼&#xff0c;都是用C#開發的 3、C#和Java Python屬于解釋型語言&#xff…

Win10安裝GPU支持的最新版本的tensorflow

我在安裝好cuda和cudnn后&#xff0c;使用pip install tensorflow安裝的tensorflow都提示不能找到GPU&#xff0c; 為此懷疑默認暗轉的tensorflow是不帶GPU支持的。 在tensorflow官網提供了多個版本的GPU支持的windows的安裝包 https://www.tensorflow.org/install/pip?hlz…

用ChatGPT和六頂帽思考法幫助自己更好地決策和解決問題

當我們在解決復雜問題時&#xff0c;我們常常陷入單一視角的狀態。創造性思維領域的先驅愛德華德博諾&#xff0c;提出了六頂帽思考法[1]&#xff0c;這意味著我們可以從六個不同的視角來思考一個問題&#xff0c;以實現高水平決策和解決問題。 每一頂“帽子”代表不同的視角。…

阿里云國際版CDN使用教程!

當網站流量達到一定值后&#xff0c;勢必會造成網站訪問卡堵&#xff0c;這時候阿里云CDN將會一個很好的選擇&#xff0c;阿里云 CDN 是由全球分布式邊緣節點組成的虛擬網絡。阿里云 CDN 可減少源站負載&#xff0c;防止網絡擁塞&#xff0c;使用阿里云 CDN 加速圖像、小文件、…

SAP ME2L/ME2M/ME3M報表增強添加字段(包含:LMEREPI02、SE18:ES_BADI_ME_REPORTING)

ME2L、ME2M、ME3M這三個報表的字段增強&#xff0c;核心點都在同一個結構里 SE11:MEREP_OUTTAB_PURCHDOC 在這里加字段&#xff0c;如果要加的字段是EKKO、EKPO里的數據&#xff0c;直接加進去&#xff0c;啥都不用做&#xff0c;就完成了 如果要加的字段不在EKKO和EKPO這兩個…

LabVIEW控制通用工作臺

LabVIEW控制通用工作臺 用于教育目的的計算機化實驗室顯著增長&#xff0c;特別是用于運動控制的實驗室。它們代表了各種工業應用中不斷擴大的領域&#xff0c;并成為以安全的方式使用通常昂貴或獨特的實驗室設備進行實時實驗的寶貴工具。NI LabVIEW等軟件應用程序的開發和不斷…

Linux 中復制文件并保持修改時間等屬性

一、遇到的問題 Linux使用cp命令復制文件備份時&#xff0c;發現文件的修改時間變成當前時間了&#xff0c;想要保留備份文件原有的修改時間及其它文件屬性。 二、實現 1、cp命令 在 Linux 中&#xff0c;你可以使用 cp 命令來復制文件&#xff0c;并通過 -p 或 --preserve…

二進制轉字符串(小數)

題目&#xff1a; 給定一個介于0和1之間的實數&#xff08;如0.72&#xff09;&#xff0c;類型為double&#xff0c;打印它的二進制表達式。如果該數字無法精確地用32位以內的二進制表示&#xff0c;則打印“ERROR”。 示例: 輸入&#xff1a;0.625 輸出&#xff1a;"…

智慧工地源碼,互聯網+建筑工地,基于微服務+Java+Spring Cloud +Vue+UniApp開發

基于微服務JavaSpring Cloud VueUniApp MySql開發的智慧工地云平臺源碼 智慧工地概念&#xff1a; 智慧工地就是互聯網建筑工地&#xff0c;是將互聯網的理念和技術引入建筑工地&#xff0c;然后以物聯網、移動互聯網技術為基礎&#xff0c;充分應用BIM、大數據、人工智能、移…

【jvm】類加載器的分類

目錄 一、說明二、示例2.1 代碼2.2 截圖 三、啟動類加載器四、擴展類加載器五、應用程序類加載器 一、說明 1.jvm支持兩種類型的類加載器&#xff0c;分別是引導類加載器&#xff08;bootstrap classloader&#xff09;和自定義類加載器&#xff08;user-defined classloader&a…

【springboot啟動報錯】java: 錯誤: 無效的源發行版:17

報錯截圖 解決方案 第一步&#xff1a;編輯配置&#xff0c;改為想用的jdk版本 第二步&#xff1a;文件--->項目結構&#xff0c;改為對應的SDK 第三步&#xff1a;文件--->設置--->構建、執行、部署--->編譯器--->Java編譯器&#xff0c;修改目標字節碼版本 第…