本文作者:HelloGitHub-嘉文

这里是 HelloGitHub 推出的《讲解开源项目》系列,今天给大家带来一款开源免费的模拟后端 API 的工具:moco

没学过后端开发的也能快速上手这个开源项目,靓仔靓妹们不必再辛苦等待后端开发 API,从而有更多的时间逛 HelloGitHub 体验更多有趣的开源项目。接下来本文将用带你快速上手 moco 这个开源工具,让你不再卡在后端接口的开发进度上,一骑绝尘!

项目地址:https://github.com/dreamhead/moco

一、moco 有什么用

我做前端或者客户端开发,对我有什么用?

  1. 在后端 API 开发缓慢的时候,如果你想测试应用展示效果,就不必再等后端进度,使用 moco 轻松模拟后端 API。
  2. 在项目初期的时候,产品经理或者是客户想看到你的应用展示,模拟好 API 就可以开发前端,展示效果啦。

我做后端开发,对我有什么用?

  1. 企业级软件一般都是多人开发,因为接口之间是互相依赖的,所以如果你依赖的服务进度缓慢或者是没有在环境中运行,你就无法对你开发的功能进行测试,进而不能及时交付项目,从而加班熬夜。
  2. 即使你所依赖的服务在环境中运行,但是所依赖的服务依旧会不断测试和调优,这个过程也可能会导致你开发功能测试出现问题。一个稳定的测试接口,减少你的等待时间。

二、快速开始

2.1 准备工作

JDK 1.8+ (推荐1.8版本)

2.2 下载 jar 包

点击此处下载 jar 包

2.3 API 配置文件

新建 hello.json 文件,写入以下内容

[{"description": "moco 快速开始示例","request": {"uri": "/hello"},"response": {"text": "Hello GitHub"}
}]

目录结构如下

├── hello.json                             // API 接口配置文件
├── moco-runner-1.1.0-standalone.jar       // 下载的模拟 API 的工具

2.4 运行项目

在该目录下运行

java -jar moco-runner-1.1.0-standalone.jar http -p 9999 -c hello.json

  • moco-runner-1.1.0-standalone.jar:运行程序的路径(刚刚下载的包的路径)
  • http:选择服务类型(有 http、https、socket)
  • -p 9999:设置服务端口 9999
  • -c hello.json:设置配置文件路径(刚刚新建的配置文件)

2.5 效果展示

在浏览器中访问一下地址

localhost:9999/hello

效果如图所示

三、详细用法

刚刚的你应该十分轻松地模拟一个简单的后端 API,是不是很有成就感?但是你使用或者开发过后端 API 你就也许知道:一个合格的后端 API 不应该仅仅局限如此。一个合格的后端 API 应该能包括:请求方法、请求 URL、请求参数、请求头、请求体、返回状态码、返回提示信息、返回头和返回体等内容。

如何使用 moco 这个开源项目模拟出一个合格的后端接口呢?接下来就带你一步步了解详细用法。

3.1 基本结构

[{"description": "moco 基本结构","request": {"uri": "/hello","method": "post"},"response": {"text": "Hello GitHub"}}
]

  • json 文件的最层是一个 [] 数组,里面可以封装多个 API(示例只有一个 API)
  • 因为 json 配置文件不支持注释,所以这个 API 的注释你可以写到 description 里面
  • request 可以包含请求的所有内容
  • response 可以包含返回的所有内容

3.2 模拟一个基本的 RESTful API

[{"description": "模拟一个基本的 RESTful API","request": {"uri": "/hello2","method": "post","headers": {"Content-Type": "application/json","Accept": "application/json","token": "header.playload.signature","Accept-Charset": "utf8"},"cookies": {"login": "true"},"json": {"name": "zhangsan","age": 13}},"response": {"json": {"message": "测试成功"},"latency": {"duration": 2,"unit": "second"},"headers": {"Content-Type": "application/json","token": "new-header.new-playload.new-signature"},"cookies": {"login": {"value": "true","domain": "localhost","secure": "true","httpOnly": "true","path": "/"}}}
}]

  • method:请求方法
  • headers:请求头
  • cookies:请求 Cookies
  • json:请求体的一种类型(还有 froms 表单等类型)
  • response 返回值的 headersjsoncookies 也类似
  • latency 模拟服务器卡顿(因为模拟的后端 API 返回数据几乎是瞬间的,这里我们让其卡顿 2 秒)

测试

这里我们使用 GitHub 上面开源免费的 API 测试软件 Postman 进行测试

(1)url、请求方法、请求头和 Cookies

(2)请求体(json)

(3)测试效果

点击 Send 发送,并在下方 response 查看测试效果

查看返回的请求头

查看返回的 Cookies

查看全局 Cookies

3.3 附件下载

有时候我们需要模拟文件下载,moco 如何实现呢?

[{"description": "moco  附件下载","request": {"uri": "/hello"},"response": {"attachment":{"filename": "demo.txt","file": "demo.txt"}}
}]

文件目录

├── hello.json                             // API 接口配置文件
├── moco-runner-1.1.0-standalone.jar       // 模拟 API 的工具
├── demo.txt                               // 要下载的文件,这里可以使用相对路径

localhost:9999/hello 即可下载 demo.txt 文件

3.4 轮询数据

如果我们刷新页面想获得不同的内容 moco 如何实现呢?

[{"description": "moco 轮询数据","request": {"uri": "/hello"},"response": {"cycle": [{"text": "hello 1"},{"text": "hello 2"},{"text": "hello 3"}]}}]

访问 localhost:9999/hello 会依次得到如下内容

hello 1
hello 2
hello 3
hello 1
hello 2
...

3.5 重定向

有时候我们想重定向页面 moco 如何实现呢?

[{"description": "moco 重定向","request": {"uri": "/hello"},"redirectTo": "https://hellogithub.com"
}]

访问 localhost:9999/hello 会自动重定向到 https://hellogithub.com

3.6 正则表达式

moco 还支持一些运算符,比如正则表达式。

[{"description": "moco 正则表达式","request": {"uri": {"match": "/hello/w*"}},"response": {"text": "Hello GitHub"}
}]

可以通过正则表达式匹配的链接访问,比如

localhost:9999/hello/jarvan
localhost:9999/hello/bmft

3.7 使用模板

有的时候我们的返回参数依赖于请求参数(比如编码类型),这个时候我们就可以用 template 模板来实现,我们可以在模板中通过 req 来表示发送的请求 。

{"description": "moco 使用模板","request": {"uri": "/hello","method": "post"},"response": {"text": {"template": "${req.method}"}}
}

返回的值是

{"text": "post"
}

四、最后

看到这里,想必你已经了解开源项目 moco 的基本使用了,是不是觉得很有意思?这里给出一个小建议,如果想真正使用这个开源项目 moco,建议参考官方文档去「实践」,这是最快捷,最有效的使用开源项目的办法。「实践」就是巩固的最佳方法,希望你能在实践中体验设计程序的快乐!

至此,感谢热爱开源的小伙伴们的阅读。 HelloGitHub 会定时介绍 GitHub 上有趣的开源免费的项目,如果你对开源项目感兴趣,那就关注我们收到第一时间​的文章推送吧。

为什么将表格的method改为post后就无法工作_不用再等后端的接口啦!这个开源项目花 2 分钟就能模拟出后端接口...相关推荐

  1. 为什么将表格的method改为post后就无法工作_用Python将Keras深度学习模型部署为Web应用程序...

    构建一个很棒的机器学习项目是一回事,但归根结底,你希望其他人能够看到你的辛勤工作.当然,你可以将整个项目放在GitHub上,但是怎么让你的祖父母也看到呢?我们想要的是将深度学习模型部署为世界上任何人都 ...

  2. 鼠標滑過表格整行改變背景色

    鼠標滑過表格整行改變背景色 <table>     <tr bgcolor="#CCCCCC onMouseOut="this.bgcolor='#00CCCC' ...

  3. 【前端】Vue+Element UI案例:通用后台管理系统-用户管理:Table表格增删查改、Pagination分页、搜索框

    文章目录 目标 代码 0.结构 1.按钮-删除 2.按钮-编辑 3.debug 4.样式 5.分页Pagination:功能 6.分页Pagination:样式 7.搜索框:功能 8.搜索框:样式 总 ...

  4. oracle 联表求和不重复_别再瞎忙了,Excel多表格求和用这4个方法分分钟完成的事...

    [温馨提示]亲爱的朋友,阅读之前请您点击[关注],您的支持将是我最大的动力! 前几天有粉丝问多表格如何求和,之前的教程中小编分享过多个方法,可以点击我的头像去主页查看.今天小编再汇总几种工作中常用的多 ...

  5. excel表格多个文件夹计算机,excle多文件并排_如何在电脑桌面并排显示多个excel...

    如何在电脑桌面并排显示多个excel 方.窗口里面有重排项以把你已经打开几EXCEL表分开同时显示在屏幕上是都一个大的EXCEL窗口里面,桌面仍然只有一个窗口 方法二.不要在EXCEL文件上双击打开, ...

  6. 关于table中一个隐藏的tr,改为显示后与其他tr样式不一样的问题

    问题:使用谷歌浏览器table中一个隐藏的tr,改为显示后与其他tr样式不一样的 根据来源的选择,改变下面输入框的类型和数量,微信号格式与其他tr不一致.显示如下: 解决方案: display 属性的 ...

  7. 【React】类excel表格的开源项目handsontable

    前言 最近在浏览时发现了一个开源项目handsontable,功能相当强大. 虽然handsontable是dom做的,但是不妨碍其类似于canvas那种excel的操作手感. 官网 https:// ...

  8. Opportunity的status改为lost后,chance of success仍然为100的原因

    Created by Jerry Wang, last modified on Jun 08, 2015 Issue:当status从Won改为Lost后,期望的结果是chance of succes ...

  9. 在线html差错,易查分在线编辑功能:发现错误随时修改,不用再重新上传表格!

    原标题:易查分在线编辑功能:发现错误随时修改,不用再重新上传表格!

最新文章

  1. 共享思维导图,协作型思维导图Leangoo
  2. 【百度地图API】如何区分地址解析和智能搜索?
  3. error while loading shared libraries:libmysqlclient.so.18 错误
  4. 一个同事做的基于yaas平台的一个应用,可以用来学习SAP yaas
  5. 芯片工程师成长之路_实施工程师的成长之路 | 来自咸职厚溥17级学姐的分享
  6. 基于maven的SpringMVC+Spring+MyBatis+Log4j2的pom配置
  7. linux跑程序占用缓存过多释放内存echo 3 > /proc/sys/vm/drop_caches
  8. idea运行android usb调试,IntelliJ IDEA
  9. 【Stimulsoft Reports.WPF教程】在代码中使用报表变量
  10. tbpbebzbyb英文_化工常用英文缩写
  11. R语言 —— 包(package)的下载和使用
  12. QT编译时查找不到GL /usr/bin/ld cannot find -lGL
  13. Hexo博客添加live2d卡通人物
  14. java斗地主socket_纯JAVA写的socket局域网斗地主游戏
  15. c#时分秒毫秒微妙_c# - 将秒转换为(小时:分钟:秒:毫秒)时间的最佳方法是什么?...
  16. Android程序员春招三面蚂蚁金服,7年老Android一次坑爹的面试经历,先睹为快
  17. arduino智能浇花系统_基于Arduino的远程自动浇花系统设计
  18. 夯实C++基础学习笔记
  19. 关于在Mac上挂载移动硬盘实现数据备份的方法
  20. 5、条件判断语句和while循环语句

热门文章

  1. tpcc-mysql percona_tpcc-mysql 对percona5.6进行压力测试
  2. matlab怎么求imf图,MATLAB中提取EMD分解后的每个IMF图像,并导出每个IMF数据
  3. iis10.0 php多版本,IIS7 IIS8 中多个版本php共存的方法
  4. linux中特殊字符反引号,linux中的特殊符号$ ‘’ 反引号 反斜杠
  5. 004redis与python的交互
  6. DCGAN baseline
  7. GroupBox控件
  8. Oracle varchar类型数值排序问题
  9. Mac生成ssh,并添加公钥到Github
  10. Tcpdump抓包实操