如果你是前端/移动端开发人员,否和我一样,经常面临下述局面:
- 尝试实现(或学习)某个框架/控件的时候,没有合适的接口提供数据;
- 工作中页面已搭完,仅剩数据请求的逻辑要实现,无奈同事的接口还没有整理出来。
此时,要么干等,要么自己动手编码进行实现,再不行了去扒拉一些免费api凑合着用。
如果有一个项目,或者一个api,能够在开发(学习)阶段输出可自由定制结构的数据,岂不是能大大提高咱的效率?
MockApi就是为此而诞生的服务端项目。它旨在为前端/移动端开发者提供模拟数据。即使不会进行服务端的API接口编码,也可通过发送http请求获取各式占位数据。
-
【Windows】MockApi是一个Spring Boot 工程,如果你有Java开发能力,可以直接clone该项目,在IDE中运行体验;
-
【Windows】下载MockApi.jar,然后在jar包所在目录启动命令行(Win+R),执行
java -jar MockApi.jar
命令在10240端口运行,也可执行java -jar MockApi.jar --server.port=xxx
自定义端口; -
【Windows】方式2的缺点是不能关闭命令行窗口,否则服务也将终止。建议将MockApi.jar安装为Windows服务,方法如下:
- 下载MockApi.jar;
- 下载winsw项目的
WinSw.Net4.exe
文件; - 将
MockApi.jar
和WinSw.Net4.exe
置于同一文件夹,并将WinSw.Net4.exe
重命名为MockApi.exe
; - 在文件夹下创建
MockApi.xml
,并写入以下内容:
<service> <id>MockApi</id> <name>MockApi</name> <description>MockApi is a provide mock data project.</description> <!-- java环境变量 --> <env name="JAVA_HOME" value="%JAVA_HOME%"/> <executable>java</executable> <arguments>-jar "C:\Users\Administrator\Desktop\MockApi\MockApi.jar"</arguments> <!-- 开机启动 --> <startmode>Automatic</startmode> <!-- 日志配置 --> <logpath>%BASE%\log</logpath> <logmode>rotate</logmode> </service>
- 命令行定位到当前目录,执行```MockApi.exe install``即可;
- 去Windows服务列表中启动程序,win+查找
services.msc
; - 若要卸载Windows服务,在命令行中执行
sc delete serverName
。
-
【Linux】下载MockApi.jar,参考这里运行jar包。
命令,就是要让一个系统执行一件事,比如git clone origin https://github.com/he110fun/MockApi.git
就是一条让git执行克隆仓库的命令。
所谓命令式接口,指的是目标接口的请求路径是命令式的。
比如http://localhost:10240/mockapi get integer
表示的是要请求一个整形数字,本次请求将返回如下数据:
{
"code": 100, // --------------响应码
"data": 11, // --------------随机数字
"time": 1584697248365 // -----当前时间
}
再比如http://localhost:10240/mockapi get image
表示的是要请求一张图片,本次请求将返回如下数据:
{
"code": 100,
"data": "https://up.enterdesk.com/edpic/3f/2a/7b/3f2a7bf15fd029ee577391e6e958173b.jpg", //---------随机图片
"time": 1584697365922
}
MockApi的命令由若干部分组成,如 mockapi cmd type topic limit count hit file delay
,除了mockapi
和cmd
的顺序固定,其他部分无顺序限制。各部分的详细定义及取值见下表:
组成 | 说明 | 支持写法 | 备注 |
---|---|---|---|
mockapi | 合法命令须以该单词开头 | mockapi | 【必】 |
cmd | 代表本次操作的动作,目前支持get/list/json。 get表示需要一个元素;list表示需要一个集合;json表示需要自定义json结构。 |
get list json |
【必】 |
type | 表示元素类型。目前支持integer/float/boolean/time/text/image/video。 分别代表 整型/浮点型/布尔值/时间戳/文本/图片url/视频url。 其中text/image/video都可认为是string类型,各自代表的含义不同罢了。 |
integer int float boolean bool time timestamp text txt image img photo picture video |
cmd=get/list【必】 |
topic | 表示一个string类型的元素的具体指向类型,多个主题以英文逗号连接。 当type=text时,支持name,soup 当type=image时,支持animal,banner,boy,car,food,girl,landscape,plant 当type=video时,支持tiktok,music |
topic=animal animal topic=animal,boy animal,boy |
type=string【选填】 默认所有 |
limit | 数值元素的上下区间,当type=integer/float有效。需要以英文圆括号包裹,包含两个端点。 | (min,max) 即(0,1024) 或(-100,100) |
type=integer/float 【选填】 默认(0,100) |
count | 当cmd=get/list时,代表返回的元素个数。 当cmd=json且不用模板时,将指定的json数据作为元素,返回count值个元素的集合。 |
-count=n n n为非0整数 |
【选填】 |
hit | 本次请求能够正常返回的几率,以介于0-1之间的浮点数标识,包含0和1。 | ok=n hit=n n n为浮点数 |
【选填】 默认1 |
delay | 模拟本次接口的调用耗时,单位为秒 | delay=n | 【选填】 默认0:即时返回 |
file | 当使用json命令时,需要指定一个json文件,MockApi将该文件的内容返回。 了解更多 |
file=xxx path=xxx |
cmd=json【必填】 |
format | 当type=time时,指定时间的展示样式,需用大括号包裹。参见SimpleDateFormat。 | {yyyy年MM月dd日 HH时mm分ss秒} | 【选填】 |
MockApi已支持的命令如下表所示:
cmd | type | file | limit | count | topic | format | hit | delay |
---|---|---|---|---|---|---|---|---|
get/list | integer | - | (min,max) | count=n | - | - | hit=x | delay=s |
float | - | 同上 | 同上 | - | - | 同上 | 同上 | |
boolean | - | - | 同上 | - | - | 同上 | 同上 | |
time | - | - | 同上 | - | {format} | 同上 | 同上 | |
text | - | - | 同上 | topic,topic... | - | 同上 | 同上 | |
image | - | - | 同上 | 同上 | - | 同上 | 同上 | |
video | - | - | 同上 | 同上 | - | 同上 | 同上 | |
json | - | xxx.txt | - | 同上 | - | - | 同上 | 同上 |
- | xxx.json | - | 同上 | - | - | 同上 | 同上 | |
- | xxx.ftl | - | - | - | - | 同上 | 同上 |
get
命令语义上来说标识只要一个元素(而非集合),但指定的count
大于1时,会和list
命令有相同的行为;list
命令将会得到一个集合,当指定的count
等于1时,会返回一个单元素集合;json
命令意在提供自定义结构的数据,该命令需要指定定义数据结构的文件。- 需要保证文件内容的书写正确,否则将导致解析失败
- 可以通过
path
指定目录,通过file
指定文件;file
和path
都接受全路径; file
和path
中的目录分割符需要使用英文.进行分割,而不能使用/或\,如C:.Users.Administrator.Desktop.template.abc.json
- 当文件格式是
.txt
和.json
时,表明【内容】和【结构】是固定的,MockApi不会填充随机内容; - 当文件格式是
.txt
和.json
时,支持指定count
,此时会将文件内容当做一个元素; - 若仅需要定义结构,内容由MockApi随机填充,则需要指定
.ftl
格式的文件。.ftl
是Freemarker的模板文件,您需要按照它的语法规定进行模板编写。 - 当文件格式是
.ftl
时,MockApi内置了一些随机数据供您使用。
mockapi
|
————image
| |
| ————animal(单张随机动物图片)
| |
| ————animals(数量随机的动物图片集合)
| |
| ————animals2(数量=2的动物图片集合)
| ...
| ————animals100(数量=100的动物图片集合)
| |
| ————其他topic
|
————video(与image结构一致)
|
————text(与image结构一致)
|
|
|
|
————integer(区间为[0,100])
| |
| ————single(单个随机数)
| |
| ————multi(数量随机的随机数字集合)
| |
| ————multi2(数量=2的随机数字集合)
| ...
| ————multi100(数量=100的随机数字集合)
|
————float(与integer结构一致)
|
————boolean(与integer结构一致)
|
————time(与integer结构一致)
- Java表现层技术有jsp、velocity、freemarker、thymeleaf,为什么使用freemarker?
- 因为jsp太古老了(不能生成源文件);
- 因为velocity从Spring Boot 1.5之后接入困难;
- 因为对thymeleaf的写法不太感冒;
new File("/").list()
将列出项目所在磁盘的根目录下的直接文件夹,如D:\
下的直接文件夹;new File("."").list()
将列出pom.xml
所在文件夹下的内容;
部分同学可能没有接触过Freemarker,这里分享一些本人开发中常用的模板文件:
- 123
- 234
俗话说:它山之石可以攻玉。同样,MockApi也是借助/借鉴了各方的机慧才得以实现。特此记录以表感谢,同时方便日后查找。
- Git
- 公司项目最近由svn迁至git,频繁使用git-bash敲命令给了我命令式接口的灵感;
- git不仅仅可以对源代码进行版本控制,几乎任何文件都可以被管理(
.psd
,.md
...)。
- IntelliJ IDEA
- 一款Java开发IDE,与Android Studio、WebStorm师出同门,操作及快捷键什么的共性很大。
- Maven
- 一款经典的构建工具。
- Spring Boot
- Java EE 主流开发框架。
- Okio
- 对Java IO的封装,使得IO操作很方便,MockApi中对文件的处理使用的该库。
- Freemarker
- 优秀的Java模板引擎,同时也有中文文档。
- Json
- 主流的数据交换及传输格式。
- Fastjson
- Alibaba开源的Java语言的Json操作库。
- Java
- 开发语言,无需多说,使用MockApi可能需要参考SimpleDateFormat。
- Lombok
- 对Java Bean的Setter/Getter等模板语法进行了大量简化。
- RxJava
- Android开发中常用到的异步处理库,MockApi暂时没有使用。
- Alibaba p3c
- Alibaba Java代码规范插件,主要对编码风格上进行规范。
- SonarLint
- 一款旨在bug出现之前就消灭它的IDE插件。