前后端分离开发接口定义mock 数据

现在开发的方式基本都采用了前后端分离的技术来实现,初期有页面原型,后端代码没有开发完成,前端工程师就不能开发前端页面,这样前端在初期就不能作业面设计,假数据是写死的不是很灵活。于是有了mock的概念。

mock介绍《图片来自mock官网》 http://mockjs.com/

这里我安利一个国内开源的mock接口定义的官方网站

https://www.easy-mock.com

这是对mock的封装,不需要单独搭建mock环境,直接定义接口按照他的返回方式进行数据返回

缺点:数据是标准的JSON key-value方式出现的 只可以对value可以采用function的方式变化 模拟复杂的对象就很困难。

优点:节省成本,快速入手,采用mock数据格式可以支持Swagger支持restFul风格请求

Lets do it

首先打开 easy-mock的官网输入用户名密码登录,没有用户名密码的会自动创建一个用户登录系统

创建一个个人项目

打开项目创建接口

如下图

具体规则查看文档

示例:

{
  data: function({
    _req,
    Mock
  }) {
    let needLoadTpl = {
      type: "danger",
      text: "该操作需要登陆才能完成,请登陆系统",
      code: null,
      errors: []
    }
    let buildStuts = _req.params.buildStuts // 请求参数 《building,builded》其他参数不接受无数据 
    let token = _req.header.token // 请求头
    let body = _req.body // 请求体
    let page = body.page
    let pageSize = body.pageSize
    let currentPage = body.currentPage
    if (token) {
      let havaData = false
      let data = {
        id: @increment(100),
        projectCode: P@date("yyyyMMdd")@string("0123456789",4), //编码
        projectName: 公园@cword("一二三四五六七八九十")号@integer(1, 4)# @string("0123456789",3), //项目名称
        customerName: @cname, //客户姓名
        customerPhone: /^(1[356789][0-9]|14[012356789])[0-9]{8}$/, //手机号
        address: @county(true)@projectName,
        workStatus: 
      } //项目地址
      if (buildStuts === building && body.length > 0) {
        data.workStatus = @integer(0, 3) // 工程状态在建工程
        havaData = true
      } else if (buildStuts === builded && body.length > 0) {
        havaData = true
        data.workStatus = 4 //完工工地
      } else {
        havaData = false
        return  params must in [building,builded] your params  + JSON.stringify(buildStuts)
      }
      if (havaData) {
        // 设置请求超时
        /*
          Mock.setup({
            timeout: 200-600
          })
        */
        return Mock.mock({
          content|1-10: [data],
          page: page ? Number.parseInt(page) : 1,
          pageSize: pageSize ? Number.parseInt(pageSize) : 10,
          totalPage: currentPage ? Number.parseInt(currentPage) : 1,
          totalRows: currentPage ? Number.parseInt(currentPage) * Number.parseInt(pageSize) : 1 * 10,
          currentPage: currentPage ? Number.parseInt(currentPage) : 1,
          body: body
        })
      }
    } else {
      return Mock.mock(needLoadTpl)
    }
  }
}

经验分享 程序员 微信小程序 职场和发展