用node搭建一個接口Mock工具

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

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

原理是很是簡單的,並且咱們對前端代碼是無侵入式的,很是友好。但實現過程當中也遇到幾個比較難處理的問題,下面詳細講解一下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後,調用這個接口拿到接口的數據格式api

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

流程以下圖:
圖片描述緩存

待改進koa

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

目前沒有請請求參數作檢查, 其實也能夠校驗請求參數的類型是否正確。url

請求透傳,若是某些接口在線上已經能夠調通,咱們直接調線上接口返回真實數據,對於線上接口調不通的再返回模擬數據。spa

相關文章
相關標籤/搜索