不用再等后端的接口啦!这个开源项目花2分钟就能模拟出后端接口

<div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/3095579-96df3ce74443e26f.jpg" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><p/><p>HelloGitHub-<strong>嘉文</strong></p><p>这里是 HelloGitHub 推出的《讲解开源项目》系列,今天给大家带来一款开源免费的模拟后端 API 的工具:moco</p><p>没学过后端开发的也能快速上手这个开源项目,靓仔靓妹们不必再辛苦等待后端开发 API,从而有更多的时间逛 HelloGitHub 体验更多有趣的开源项目。接下来本文将用带你快速上手 moco 这个开源工具,让你不再卡在后端接口的开发进度上,一骑绝尘!</p><h1>一、moco 有什么用</h1><blockquote><p>我做前端或者客户端开发,对我有什么用?</p></blockquote><ol><li>在后端 API 开发缓慢的时候,如果你想测试应用展示效果,就不必再等后端进度,使用 moco 轻松模拟后端 API。</li><li>在项目初期的时候,产品经理或者是客户想看到你的应用展示,模拟好 API 就可以开发前端,展示效果啦。</li></ol><blockquote><p>我做后端开发,对我有什么用?</p></blockquote><ol><li>企业级软件一般都是多人开发,因为接口之间是互相依赖的,所以如果你依赖的服务进度缓慢或者是没有在环境中运行,你就无法对你开发的功能进行测试,进而不能及时交付项目,从而加班熬夜。</li><li>即使你所依赖的服务在环境中运行,但是所依赖的服务依旧会不断测试和调优,这个过程也可能会导致你开发功能测试出现问题。一个稳定的测试接口,减少你的等待时间。</li></ol><h1>二、快速开始</h1><h1>2.1 准备工作</h1>JDK 1.8+ (推荐1.8版本)<h1>2.2 下载 jar 包</h1><p>点击此处下载 jar 包</p><h1>2.3 API 配置文件</h1><p>新建 <span style="font-size:0.882em"><span>hello.json</span></span> 文件,写入以下内容</p>[{ "description": "moco 快速开始示例", "request": { "uri": "/hello" }, "response": { "text": "Hello GitHub" }}]<p>目录结构如下</p>├── hello.json // API 接口配置文件├── moco-runner-1.1.0-standalone.jar // 下载的模拟 API 的工具<h1>2.4 运行项目</h1><p>在该目录下运行</p>java -jar moco-runner-1.1.0-standalone.jar http -p 9999 -c hello.json<blockquote><p><span style="font-size:0.882em"><span>moco-runner-1.1.0-standalone.jar:运行程序的路径(刚刚下载的包的路径)</span></span></p><span><p><span style="font-size:0.882em"><span>http:选择服务类型(有 http、https、socket)</span></span></p><p><span style="font-size:0.882em"><span>-p 9999:设置服务端口 9999</span></span></p><p><span style="font-size:0.882em"><span>-c hello.json:设置配置文件路径(刚刚新建的配置文件)</span></span></p></span></blockquote><h1>2.5 效果展示</h1><p>在浏览器中访问一下地址</p>localhost:9999/hello<p>效果如图所示</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/3095579-bc23c108aee53c94.jpg" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><p/><h1>三、详细用法</h1><p>刚刚的你应该十分轻松地模拟一个简单的后端 API,是不是很有成就感?但是你使用或者开发过后端 API 你就也许知道:一个合格的后端 API 不应该仅仅局限如此。一个合格的后端 API 应该能包括:请求方法、请求 URL、请求参数、请求头、请求体、返回状态码、返回提示信息、返回头和返回体等内容。</p><p>如何使用 moco 这个开源项目模拟出一个合格的后端接口呢?接下来就带你一步步了解详细用法。</p><h1>3.1 基本结构</h1>[ { "description": "moco 基本结构", "request": { "uri": "/hello", "method": "post" }, "response": { "text": "Hello GitHub" } }]<li>json 文件的最层是一个 <span style="font-size:0.882em"><span>[]</span></span> 数组,里面可以封装多个 API(示例只有一个 API)</li><li>因为 json 配置文件不支持注释,所以这个 API 的注释你可以写到 <span style="font-size:0.882em"><span>description</span></span> 里面</li><li><span style="font-size:0.882em"><span>request</span></span> 可以包含请求的所有内容</li><li><span style="font-size:0.882em"><span>response</span></span> 可以包含返回的所有内容</li><h1>3.2 模拟一个基本的 RESTful API</h1><li><span style="font-size:0.882em"><span>method</span></span>:请求方法</li><li><span style="font-size:0.882em"><span>headers</span></span>:请求头</li><li><span style="font-size:0.882em"><span>cookies</span></span>:请求 Cookies</li><li><span style="font-size:0.882em"><span>json</span></span>:请求体的一种类型(还有 <span style="font-size:0.882em"><span>froms</span></span> 表单等类型)</li><li><span style="font-size:0.882em"><span>response</span></span> 返回值的 <span style="font-size:0.882em"><span>headers</span></span> 、<span style="font-size:0.882em"><span>json</span></span>、<span style="font-size:0.882em"><span>cookies</span></span> 也类似</li><li><span style="font-size:0.882em"><span>latency</span></span> 模拟服务器卡顿(因为模拟的后端 API 返回数据几乎是瞬间的,这里我们让其卡顿 2 秒)</li><p><strong>测试</strong></p><p>这里我们使用 GitHub 上面开源免费的 API 测试软件 Postman 进行测试</p><p>(1)url、请求方法、请求头和 Cookies</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/3095579-773f2ca6c4497664.jpg" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><p/><p>(2)请求体(json)</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/3095579-d05be4e44f003d14.jpg" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><p/><p>(3)测试效果</p><p>点击 Send 发送,并在下方 response 查看测试效果</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/3095579-98213e911dca20a8.jpg" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><p/><p>查看返回的请求头</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/3095579-6d4e30be2857cc35.jpg" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><p/><p>查看返回的 Cookies</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/3095579-08e58f3c46d86b5e.jpg" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><p/><p>查看全局 Cookies</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/3095579-ec62be25409c0c24.jpg" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><p/><h1>3.3 附件下载</h1><p>有时候我们需要模拟文件下载,moco 如何实现呢?</p>[{ "description": "moco 附件下载", "request": { "uri": "/hello" }, "response": { "attachment":{ "filename": "demo.txt", "file": "demo.txt" } }}]<p>文件目录</p>├── hello.json // API 接口配置文件├── moco-runner-1.1.0-standalone.jar // 模拟 API 的工具├── demo.txt // 要下载的文件,这里可以使用相对路径<p><span style="font-size:0.882em"><span>localhost:9999/hello</span></span> 即可下载 <span style="font-size:0.882em"><span>demo.txt</span></span> 文件</p><h1>3.4 轮询数据</h1><p>如果我们刷新页面想获得不同的内容 moco 如何实现呢?</p>[{ "description": "moco 轮询数据", "request": { "uri": "/hello" }, "response": { "cycle": [{ "text": "hello 1" }, { "text": "hello 2" }, { "text": "hello 3" } ] }}<span>]</span><p>访问 <span style="font-size:0.882em"><span>localhost:9999/hello</span></span> 会依次得到如下内容</p>hello 1hello 2hello 3hello 1hello 2...<h1>3.5 重定向</h1><p>有时候我们想重定向页面 moco 如何实现呢?</p>[{ "description": "moco 重定向", "request": { "uri": "/hello" }, "redirectTo": "https://hellogithub.com"}]<p>访问 <span style="font-size:0.882em"><span>localhost:9999/hello</span></span> 会自动重定向到 <span style="font-size:0.882em"><span>https://hellogithub.com</span></span></p><h1>3.6 正则表达式</h1><p>moco 还支持一些运算符,比如正则表达式。</p>[{ "description": "moco 正则表达式", "request": { "uri": { "match": "/hello/\w*" } }, "response": { "text": "Hello GitHub" }}]<p>可以通过正则表达式匹配的链接访问,比如</p>localhost:9999/hello/jarvanlocalhost:9999/hello/bmft<h1>3.7 使用模板</h1><p>有的时候我们的返回参数依赖于请求参数(比如编码类型),这个时候我们就可以用 template 模板来实现,我们可以在模板中通过 <span style="font-size:0.882em"><span>req</span></span> 来表示发送的请求 。</p>{ "description": "moco 使用模板", "request": { "uri": "/hello", "method": "post" }, "response": { "text": { "template": "${req.method}" } <span>}</span>}<p>返回的值是</p>{ "text": "post"}<h1>四、最后</h1><p>看到这里,想必你已经了解开源项目 moco 的基本使用了,是不是觉得很有意思?这里给出一个小建议,如果想真正使用这个开源项目 moco,建议参考官方文档去「实践」,这是最快捷,最有效地使用开源项目的办法。「实践」就是巩固的最佳方法,希望你能在实践中体验设计程序的快乐!</p><p>至此,感谢热爱开源的小伙伴们的阅读。HelloGitHub 会定时不断介绍 GitHub 上有趣的开源免费的项目,如果你对开源项目感兴趣,那就关注我们收到第一时间的文章推送吧。</p><p>如果本文有为你带来一点点帮助,就请在右下角帮我点个<strong>赞</strong>吧!</p>

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • 我是服务器小白。不了解真正的服务器是怎么搭建的。但是小编在本文将会讲述如何在十分钟内,在自己的电脑上搭建出服务器。...
    Airfei阅读 4,607评论 20 58
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,480评论 2 59
  • 夜莺2517阅读 127,665评论 1 9
  • 版本:ios 1.2.1 亮点: 1.app角标可以实时更新天气温度或选择空气质量,建议处女座就不要选了,不然老想...
    我就是沉沉阅读 6,802评论 1 6