在項目中接入YApi的mock服務


通常一個需求過完TD之后,后端提供哪些接口,每個接口返回的字段也就已經確定了, 接下來就是前后端並行的開發。但經常會出現進度不一樣的情況,有時候前端開發完了接口還沒好,一直等待后端接口的話,會嚴重影響開發效率,采用mock方式可避免這個問題。

何為Mock?

Mock是一種根據約定規則進行數據模擬的技術,通過mock我們可以在不修改既有代碼的情況下,攔截ajax請求,返回模擬的響應數據。

總結起來mock有以下優點:

  1. 讓前端攻城師獨立於后端進行開發;
  2. 通過隨機數據,模擬各種場景,增加單元測試的真實性;
  3. 開發無侵入;
  4. 用法簡單,符合直覺的接口;

YApi的Mock服務

mock框架有很多,常見的有mock.js, EasyMock等,為什么選用YApi的mock呢?

  1. YApi是公司主推的接口管理工具,支持swagger導入;

  2. 不用再自己寫mock規則,Yapi自帶mock服務,能夠根據接口的數據結構生成隨機數據;

  3. 每一個接口都對應一個mock地址,而且地址的規則是固定的 ${yapi-host}/mock/${appid}/${api-path} ,前端可以在不修改既有代碼的情況下,通過反向代理調用mock服務;

如何在項目中接入Yapi的mock服務

以Vue項目為例,前端只需3步就能通過yapi mock數據:

1. package.json文件,添加一個script

scripts {
  ...
  
  "mock": "VUE_APP_MOCK=true VUE_APP_MOCK_BASE_API=/mock/<yapi-AppId>/ajax vue-cli-service serve",
}

該命令設置了兩個變量,VUE_APP_MOCK指是否啟動mock,VUE_APP_MOCK_BASE_API為mock的base api,注意變量名必須以大寫的VUE_APP_開頭;

以EAS對接平台為例,正常的接口路徑為'/ajax/xxxx',接口的mock地址為'/mock/1859/ajax/xxxxx',那參數VUE_APP_MOCK_BASE_API就可以設置為'/mock/1859/ajax';

2. 創建axios實例的時候根據配置項設置 baseurl

const http = Axios.create({
  ...
  baseURL: process.env.VUE_APP_MOCK
    ? process.env.VUE_APP_MOCK_BASE_API : process.env.VUE_APP_BASE_API,
  ...
});

VUE_APP_BASE_API 是正常調用接口的base url, 通常為'/ajax';

3. vue.config文件配置 mock服務的反向代理

const vueConfig = {
  devServer: {
    proxy: {
      '/mock/1859/ajax': {
        https: true,
        target: 'https://yapi.xrxr.xyz',
        ws: true,
        changeOrigin: true,
      },
      '/ajax': {
        https: true,
        target: 'https://easproxyadmin.aihaisi.com/',
        ws: true,
        changeOrigin: true,
      },
    },
  },

注意順序:先‘mock/1859/ajax’,后配置‘ajax’

配置完后,運行 npm run mock,啟動項目就可以調用YApi的mock服務來mock數據了。

YApi mock服務的一些高級用法

定制生成規則

mock服務會根據接口定義生成隨機數據,這些數據能滿足接口類型的定義,但是有時候卻不合法。例如分頁信息pagesize,時間戳類型的字段,mock服務可能會返回一個負數,通過定制字段的規則可以避免這種情況。

  1. YApi中接口頁面點擊編輯
  2. 點擊需要調整的字段的設置按鈕
  3. 在設置彈窗中可以設置規則
    image

高級mock

有時候不同的請求參數、IP地址返回不同的 HTTP Code、HTTP 頭和 JSON 數據,yapi的高級mock提供了兩種方式來解決這個問題。

1. Mock期望

YApi提供了交互式的彈窗來添加Mock期望。例如:想mock一下名稱是zwj的菜單列表

  1. 選中接口,點擊高級mock
  2. 點擊‘添加期望‘按鈕,填寫過濾規則以及期望返回數據,點擊『確定』保存。
    image
  3. 運行項目,打開對應的頁面,調用接口查看返回的數據,結果就是高級mock中設置的期望返回數據。
2. 自定義腳本

自定義腳本是一種更靈活的方式。Mock期望的方式添加的條件只能是參數等於某個值,才能返回相應的數據,而自定義腳本可以添加一些邏輯判斷,根據用戶請求的參數修改返回內容。

舉個例子:批量同步接口,它接收一個日期范圍,同步所有待同步的數據,但如果日期范圍超過30天,返回錯誤提示。這個時候就可以用自定義腳步對mock請求進行判斷處理。

  1. 切換到腳步選項卡,輸入下面的腳步,點擊保存
if (params.end - params.start  > 30*24*60*60*1000) {
    mockJson.errMessage = '不能大於30天'
    mockJson.success = false;
} else {
    mockJson.success = true;
}
  1. 運行項目看下效果
    image

Yapi提供了一些全局變量可以在腳本中使用:

請求

  • header:請求的 HTTP 頭
  • params:請求參數,包括 Body、Query 中所有參數
  • cookie:請求帶的 Cookies

響應

  • mockJson:接口定義的響應數據 Mock 模板
  • resHeader:響應的 HTTP 頭
  • httpCode:響應的 HTTP 狀態碼
  • delay:Mock 響應延時,單位為 ms
  • Random:Mock.Random 方法,可以添加自定義占位符,詳細使用方法請查看 Wiki

Mock 優先級說明

請求 Mock 數據時,規則匹配優先級:Mock 期望 > 自定義 Mock 腳本 > 項目全局 mock 腳本 > 普通 Mock。

總結

YApi的mock服務真的挺好用的, 接入也很簡單,前端小伙伴們可以試着用一用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM