最近公司需要用到mock
服务,想起以前开发的simple-boot-mock-server
,已经有几年了,当时是疫情时在家办公有些第三方服务调用不了,自己开发了一个小mock
工具,处理简单的请求响应数据,如果只是前端mock
,mockjs
就够用,但大多数时候需要后端mock
,除了返回json
,还需要返回xml
等。以前有个fastmock
服务,因为某些原因关闭了,自己开发定制更加适合自己使用场景。
主要功能需求
- 能
mock
部分请求- 公司里面很多时候并不是需要
mock
所有api
,只需要mock
部分api
,比如一个api
有很多功能,可能只需要mock
预订和取消,查询、验价等更多功能并不需要 - 我们可能只配置了一个地址,不同接口根据
url
路径分发,要mock
部分接口的话就要把其他接口转发给原地址
- 公司里面很多时候并不是需要
- 支持
json
、xml
等返回数据- 对接接口很多,有
xml
和json
等常规数据,还有SOAP
协议数据 mock
服务并不关心数据,只需要配置什么数据就返回什么数据
- 对接接口很多,有
- 多种匹配规则
- 公司对接接口很多,有些使用同一个
url
的get
模式处理所有请求并响应数据,因此需要根据请求参数不同来判断是什么接口,并实现mock
- 需要支持请求参数、请求体、路径参数、甚至头信息计算匹配请求
- 公司对接接口很多,有些使用同一个
实现技术栈
基于Spring Boot开发的Mock数据服务器,主要要两个项目:
- 后台服务simple-boot-mock-server
- UI界面simple-boot-mock-newui(Vue3)
最后打包的时候合并到一个项目中,成为一个jar包,最后打包成为一个zip文件,加压运行即可。
源码:https://github.com/fugary/simple-boot-mock-server
后端框架
- Spring Boot
- Mybatis、MybatisPlus
- Lombok
- Logback
- FlywayDB
- ScriptEngine(JDK自带)
- JWT
前端系统
基于自己对element-plus
的二次封装:https://github.com/fugary/simple-element-plus-template
- Vue3全家桶
- element-plus
- dayjs
- lodash-es
- monaco-editor、vue-monaco-editor——主要文本编辑器
运行介绍
从最新releases
地址下载之后,解压后点击start.bat
即可基于文件数据库H2
运行,自动产生数据库文件,下载地址:
https://github.com/fugary/simple-boot-mock-server/releases/
结构介绍
目录结构:
/xxxx.jar——可执行jar,可用java -jar
命令启动,也可以直接用start.bat启动
/data——H2数据库文件(运行后产生),可以支持配置MySQL数据
/config——application.yml
配置文件
/bin——start.bat和start.sh启动文件
/logs——日志输出目录(运行后产生)
功能介绍
- 模拟分组,每个分组可以配置多个请求链接,支持配置代理地址
- 模拟请求预览,支持URL参数,请求参数,请求头信息、请求体等预览和保存
- 预览同时会保存请求相关参数,方便本地测试
- 预览使用
monaco-editor
编辑请求体
- 支持响应内容用请求参数替换,参数用
{{}}
包裹- 如链接中有参数:
/mock/xxxxx/request?id=xyz
- 输出可以有
{"id": "{{request.parameters.id}}"}
- 如链接中有参数:
- 可以配置多个响应输出,指定一个作为默认输出。方便在不改变URL的情况下模拟成功、失败等多种情况
- 支持
mockjs
语法(直接使用mockjs
解析执行) - 快速复制URL、响应内容等
- 支持重定向链接
- 响应里面配置重定向的URL
- 配置Status Code为302
- 支持作为反向代理,代理
URL
地址,可以只mock
部分请求,其他请求发送给代理url
地址获取响应 - 除了支持
URL
路径和请求方法匹配,新增支持匹配表达式,可以根据request
内容匹配请求request.body
——body
内容对象(仅json
时会解析成对象)request.bodyStr
——body
内容字符串request.headers
——头信息对象request.parameters
——请求参数对象request.pathParameters
——路径参数对象
- 支持匹配表达式测试功能,方便测试表达式是否正确
- 增加响应延迟,可以模拟延迟一段时间才响应数据
- 支持简单用户管理,默认账号:
admin/12345678
和mock/mock
两个用户,支持修改密码,使用SHA256
加密算法 - 各用户管理自己的
mock
分组数据,管理员可以看到其他人的数据 - 除了H2数据库,增加MySQL数据库支持
Docker支持
已发布到docker
服务,地址:https://hub.docker.com/r/fugary/simple-boot-mock-server
Docker
运行
docker
运行相对比较简单,只要已经安装好docker
,直接使用命令就可以自动拉去镜像并运行了
docker run -p 9086:9086 fugary/simple-boot-mock-server:latest
docker run -p 9086:9086 fugary/simple-boot-mock-server:latest
Unable to find image 'fugary/simple-boot-mock-server:latest' locally
latest: Pulling from fugary/simple-boot-mock-server
f7dab3ab2d6e: Already exists
fca324c253e8: Already exists
108280b9f610: Already exists
8a2821847d87: Pull complete
Digest: sha256:9ab82f00b9e778aea28024c87687d81086173e39a59d72bb5a0a33d78a9d441c
Status: Downloaded newer image for fugary/simple-boot-mock-server:latest
启动后可以通过:http://localhost:9086 访问,账号:admin/12345678
和mock/mock
,可以自行增减用户和修改密码。
注意:mock服务链接没有安全性控制,属于公开链接
Docker环境变量
服务有不少环境变量可以配置,支持配置成MySQL
环境变量名 | 默认值 | 说明 |
---|---|---|
MOCK_DB_TYPE | h2 | 数据库类型,支持:h2、mysql |
MOCK_DB_USERNAME | root | 数据库用户名(h2/mysql共用) |
MOCK_DB_PASSWORD | 123456/12345678 | 数据库密码(h2/mysql共用) |
MOCK_DB_H2_CONSOLE | false | 是否开启h2数据库的控制台 |
MOCK_DB_POOL_SIZE | 5 | 连接池大小 |
MOCK_DB_DATA_DIR | /data | h2的数据目录 |
MOCK_DB_MYSQL_SERVER | localhost | MySQL服务器地址(MOCK_DB_TYPE=mysql时有效) |
MOCK_DB_MYSQL_PORT | 3306 | MySQL端口(MOCK_DB_TYPE=mysql时有效) |
MOCK_DB_MYSQL_DBNAME | mock-db | MySQL数据库名(MOCK_DB_TYPE=mysql时有效) 需要自行先建立数据库 |
MOCK_LOG_DIR | logs | 日志目录 |