事出有因
昨天跟同事討論我們在用的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性能測試?
九、軟件測試全套資料
十、總結(文末尾部小驚喜)
生命不息,奮斗不止。每一份努力都不會被辜負,只要堅持不懈,終究會有回報。珍惜時間,追求夢想。不忘初心,砥礪前行。你的未來,由你掌握!
生命短暫,時間寶貴,我們無法預知未來會發生什么,但我們可以掌握當下。珍惜每一天,努力奮斗,讓自己變得更加強大和優秀。堅定信念,執著追求,成功終將屬于你!
只有不斷地挑戰自己,才能不斷地超越自己。堅持追求夢想,勇敢前行,你就會發現奮斗的過程是如此美好而值得。相信自己,你一定可以做到!