Yapi Mock Server
Mock基本概念
对于前端来说Mock是在后端给出接口但没有书写实现的时候,可以按照后端给的入参和返回参数模拟出数据,前端发起请求,前端不必等着后端实现了接口再去对接数据,前端工作能够提前一部分。
语法:
// 属性名 name
// 生成规则 rule
// 属性值 value
'name|rule': value
示例Mock:
Mock.mock({//代码书写
"object|2": {
"310000": "上海市",
"320000": "江苏省",
"330000": "浙江省",
"340000": "安徽省"
}
})
语法:
{
"object": {
"310000": "上海市",
"330000": "浙江省"
}
}
更多语法及示例请移步Mockjs官网
Yapi Mock
在yapi中的Mock和Mock官网给出的语法及用法没有太大的出入,基本Mock的语法及规则在yapi中也是可以使用的。不过有一些较特殊的地方需要注意:yapi对Mock进行了一些处理,有一些其特有的用法。
Mock 优先级
在yapi中请求 Mock 数据时,规则匹配优先级:Mock 期望 > 自定义 Mock 脚本 > 项目全局 Mock 脚本 > 普通 Mock。
普通Mock
- 支持获取请求的 query, body 参数并返回
{
"name": "${query.name}", //请求的url是/path?name=xiaoming, 返回的name字段是xiaoming
"type": "${body.type}", //请求的requestBody type=1,返回的type字段是1
}
- 创造多条数据
{
"data": {
"content|10": [
{
"asnQty": 50,//预出货数量
"companyCode": "@string(4)",
"companyPartNo": "@string(4)",
"materialDescription": "@string(4)",
"poId": "@string(4)",
"poLine": "@string(4)",
"poLineId": "@string(4)",
"poNo": "@string(4)",
"poTotalQty": 80,
"receivedQty": 20,
"requestDate": "@timestamp",
"sccpBalanceQty": 50,//SCCP剩余数量
"sccpLockQty": 10,
"countUnit":"@string(4)",
"vendorCode": "@string(4)",
"vendorPartNo": "@string(4)"
}
],
"pageIndex": 1,
"pageSize": 10,
"paged": true,
"totalCount": 25,
"totalPages": 3
},
"errorCode": "sunt do in commodo",
"errorData": {},
"message": "nulla dolor Ut sed",
"success": false
}
json-schema
一种基于 JSON 格式定义 JSON 数据结构的规范。
- 在将swagger的json导入到yapi中,会自动根据swagger生成对应的数据类型自动生成mock数据,但多数数据不是我们想要的,可在接口的编辑页面对具体某个数据mock栏位对其修改。mock栏位的书写方式是mock的数据占位符。例:@id可生成一串数字,@timestamp可生成随机时间戳。更多数据占位符请参考Mockjs官网
Mock期望
如有需要根据不同的请求参数、IP 返回不同的 HTTP Code、HTTP 头和 JSON 数据。Mock期望就是根据设置的请求过滤规则,返回期望json数据。
Mock自定义脚本
根据用户请求的参数修改返回内容。(js脚本)
请求
- header 请求的 HTTP 头
- params 请求参数,包括 Body、Query 中所有参数
- cookie 请求带的 Cookies
响应
- MockJson 接口定义的响应数据 Mock 模板
- resHeader 响应的 HTTP 头
- httpCode 响应的 HTTP 状态码
- delay Mock 响应延时,单位为 ms
yapi 坑位
多数数据的返回结构,前端拿到之后可以继续进行下一步的操作,有一部分的数据mock出来的数据太大,会导致页面达不到理想的效果,需要对其进行特殊处理
- 分页信息返回,默认mock出来的数据,数字会出现负数,在json-schema中对分页信息的mock栏位给一个默认的初始化可完成{pageIndex:1,pageSize:10,totalCount:20}。
- 时间戳,默认后端给出的时间戳的字段是经过yapi的自动mock之后,可能是一串字母,前端对接到日期为字母的再前端页面上会报错,需要对日期做处理。在具体的日期栏位的mock处填入数据占位符@timestamp。
- 后端导入swagger,前端所做的mock数据全没了,接口有时候也改了,前端也会报错,后端更新yapi的时候细小的变化,直接在yapi上更改,一个controller的更改只更新当前yapi controller的更改。