【大白话】 将swagger转mock数据模板

一 背景

在实际的项目开发中,我们有时需要使用到mock模拟数据返回,从而达到前后端开发的进度并行,为了能够简化我们书写mock所带来的繁琐的过程, 所以我们需要一个工具可以快捷的将swagger的数据转化为我们需要的mock模板(都是废话),本来是准备为在公司的项目服务的,有mock和没有mock我觉得对一个程序的开发运行是有本质区别的。结果组长直接否决的,原因是:我们的数据比较复杂,这个还要写模拟数据麻烦(所以我们还是什么都不用,其实挺不开心的)。下面还是分享下开发过程的思路吧(不喜欢打字,我就想贴代码完事了其实)

二 实现思路

为了实现swagger的转化,我们需要调研swagger的数据规律,打开一个swagger页面,我们查看他的页面请求,可以找到一个http://xxxxx/v2/api-docs的请求,好了,下面已经不需要思路的,直接找规律就好了(实在没啥好说的了)

简单的补充下就是paths就是你的地址 definitions就是你的入参和出参中的对象,我们的工作就是把这个数据联系起来生成我们需要的mock数据格式

三 运气好的话说不定可以满足你的要求

运气地址 总之真的看运气了,里面还有一些问题,比如request里面不支持definitions里面的对象,对我现在的项目已经满足了,你也可以自己改改,生成的mock模板与rap2相同,我会更具接口文档中入参的必要性在request中添加一个@required字段 如果你缺少该字段将无法的到预期的结果

大致的模板如上

下面开始贴使用方式了

import Mock from 'mockjs'

Mock.setup({
  timeout: '200-600'
})

var context = require.context('./mockTemplate', true, /\.js$/)
const requireAll = requireContext => requireContext.keys().map(requireContext)
requireAll(context)

for (let repositoryId in RAP.interfaces) {
  for (let itf of RAP.interfaces[repositoryId]) {
    Mock.mock(new RegExp('^' + itf.url, 'g'), itf.method.toLowerCase(), function (options) {
      let noQequest = []
      switch (itf.method.toLowerCase()) {
        case 'post':
          noQequest = checkRequest(options.body, options.url, itf.request)
          break
        case 'get':
          noQequest = checkRequest(options.body, options.url, itf.request)
          break
      }
      if (noQequest.length > 0) {
        return {
          status: 500,
          message: '缺少字段' + noQequest
        }
      } else {
        return Mock.mock(itf.response)
      }
    })
  }
}

function checkRequest (bodys, url, request) {
  let body = bodys || []
  let params = parseUrl(url) || []
  let requestArr = []
  Object.keys(request).forEach(item => {
    if (item.indexOf('@required') > 0) requestArr.push(item.split('@')[0])
  })
  let noinclude = []
  let assign = Object.assign(params, body)
  let assignArr = Object.keys(assign)
  requestArr.forEach(item => {
    if (!assignArr.includes(item) || !assign[item]) noinclude.push(item)
  })
  return noinclude
}

function parseUrl (url) {
  var pattern = /(\w+)=(\w+)/ig
  var parames = {}
  url.replace(pattern, function (a, b, c) {
    parames[b] = c
  })
  return parames// 返回这个数组.
}

这里的一个重点就是使用了require.context,我们是不在一个个导入的 直接一次性的引入

同时为了防止在生产环境出现mock的假数据 增加代码:process.env.NODE_ENV === 'development' && import('@/mockCenter')

到这里就基本结束了整个mock的过程,因为我们确定不会使用,所以没有后续的优化和实战的总结,希望对需要的读者有所帮助

总结

rap2真香,我干嘛要写个转化工具

    

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值