用node搭建一個接口Mock平臺

背景
項目開發過程中,有一個必不可少的環節--接口聯調,由於前端後端開發進度不同,有時前端需要等待後端的接口,或者前端爲了調試ui,需要在本地mock接口數據。不同的接口,返回的數據格式是不一樣的,每次都去手動mock數據,難免繁瑣和低效。能否搭建一個自動化的mock平臺,自動從接口文檔中獲取所有接口的數據格式,然後mock對應的數據返給前端呢?

實現
基本原理是:前端發出的接口請求被代理到Mock平臺,Mock平臺根據接口url去調接口文檔api拿到接口數據格式,根據接口數據格式生成一份模擬數據返給前端;

原理是非常簡單的,而且我們對前端代碼是無侵入式的,非常友好。但實現過程中也遇到幾個比較難處理的問題,下面詳細講解一下Mock平臺的實現細節。

公司的接口是分模塊的,每個模塊內部是接口詳情。這裏我抓取了公司接口文檔的3個api.
/api/module/list 這個api返回所有的接口模塊,會返回類似[{name: '模塊名', _id: 32468437}]這樣的數組
/api/list?moduleId=xx 這個api根據模塊id(也就是上一個接口返回的那個模塊_id),返回該模塊的所有接口。這裏就有一個問題了?前端是用url來請求接口的,如何根據url拿到接口詳情數據呢?難道前端請求時去遍歷所有的url嗎?肯定是不合適的,我的做法是首先遍歷一遍所有的模塊的接口詳情,把url和id的對應關係保存一個對象序列化到一個文件中,然後node程序運行時,再把url和id映射對象讀到內存中緩存,當匹配不到請求的url時,我們重新遍歷一次接口文檔中接口,刷新緩存(限制每小時只能刷新一次,防止不必要的請求)。
/api/get?id=xx 這個api根據接口id返回接口詳情數據,我們根據緩存拿到前端請求的url的id後,調用這個接口拿到接口的數據格式

node層用koa來響應請求和返回mock數據,根據接口詳情api拿到接口數據格式,然後用Mock生成模擬數據。如何使mock的數據和真實數據更像?這也是一個比較難處理的問題,目前的做法是對特定字段的數據做特殊化處理,比如字段名爲mobile,其數據類型是String,但我們知道它代表一個手機號,就返回一個手機號,某些特定字段可以這樣做特殊處理。其他的字段,就根據接口類型返回符合類型的隨機數據。

流程如下圖:
圖片描述

待改進

目前對特定字段的處理是在代碼裏用邏輯判斷,可以考慮生成一份配置文件來保存。畢竟特定業務中的特定字段也不會特別多,用配置文件來保存是可行的,也比較容易維護。

目前沒有請請求參數做檢查, 其實也可以校驗請求參數的類型是否正確。

請求透傳,如果某些接口在線上已經可以調通,我們直接調線上接口返回真實數據,對於線上接口調不通的再返回模擬數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章