你可以创造一个东西,至于它怎样发展,那就不是你所能预期的了。
Moco是什么?
Moco是一个可以轻松搭建测试服务器的框架/工具/程序库。
Moco的使用场景
1、我是一个企业级软件开发人员,每次面对集成就是我头疼开始的时候,漫长集成拉锯战拖延了我们的进度。幸好有了Moco,几行配置就可以模拟一个服务,我再也不需要看集成服务团队的脸色了。 2、我是一个移动开发人员,老板催得紧,可服务器端开发进度慢,我空有一个漂亮的iphone应用,发挥不出作用。幸好有了Moco,很快就可以搭建出一个模拟服务,我再也不用把生命浪费在无效的等待上了。 3、我是一个前端开发人员,做Inception的时候,客户总想看到一个完整的应用演示,可哪有时间开发后端服务啊!幸好有了Moco,几下就可以弄出一个模拟服务,我做的页面一下就有了生命力。
使用Moco
Moco目前支持多种使用方式,最基本的方式是两种:API和独立运行。 1、如果你编写的是个Java应用(或是以其它JVM上的语言编写的应用),你可以采用直接调用API;我们也可以独立运行的方式,在配置文件中,配置一个属于自己的服务器。 2、如果你是Mac或是Linux用户,你还可以选择Shell的方式运行。事实上,它是最简单的方式,它会自动帮助你找到最新版本的Moco。 3、如果你在用Maven,那么Moco的Maven插件你一定会喜欢。作为一个新时代的自动化用户,Gradle插件也是不可或缺的。
Moco的缘起
我写Moco的初衷是为了简化集成,设计API是我最主要的关注点。Moco Runner是一个顺手完成的部分,让Moco可以独立运行起来。但每个人的关注点是不同的,有人把Moco用了起来,但是用法同我最初的设想完全不一样。 我知道的第一个Moco用户是我的一个同事,我在澳洲出差的那段时间给他介绍了Moco,他当时正要写一个iOS上的一个客户端。因为服务器端API尚未开发,更准确的说,连API应该是什么样子还没有人清楚。为了能够让他的iOS客户端能够顺利编写下去,他用Moco模拟了一个服务器,来什么请求,返回什么样的应答。于是,他高高兴兴地写起了他的客户端。在开发的过程中,他不断地调整着API的设计,因为只有通过实际的开发,他才知道自己真正想要的API是什么样子的。就这样,在服务器端代码还没有真正动手之前,他已经提供出一份真正满足他需要的API文档,剩下的就是服务器端照着这份API去实现了。 公司内部与立人图书馆展开合作,帮助他们开发一个图书管理的手机端应用。你猜对了,这个项目里Moco也起到了作用。手机端应用在服务器端尚未就绪的情况下便启动了,他们用Moco模拟了一个服务器,这样,手机端应用就可以顺利地开始开发了。Moco新增了一个功能,当配置文件修改时,自动重新加载,这个功能就是由这个项目的人提出的。 从这两个例子里可以看到,在移动开发中,Moco起到了很大的作用:在服务器端开发完成之前,客户端通过Moco构建的模拟服务器就可以进行开发。 把Moco和移动开发结合起来,这是我设计Moco时从未有过的想法,这也是创造一个东西的魅力所在,你无法预期它会朝着哪个方向发展。近来不断地将Moco介绍给更多的人,越来越多的新想法也涌现了出来。有人想把它与前端开发结合起来,有人想让它反过来支持客户端的模拟。 我原以为Moco已经没什么好做的了,因为我想实现的东西都有了,现在看来,还停不下来。 有人关心Moco启动飞快的原因,底层用了哪个库。目前Moco底层用的Netty,JBoss的一个异步IO库,类似的库还有grizzly和Mina。虽然Moco支持的HTTP,但我并没有选择Tomcat或Jetty,从Moco提供的接口可以看到,我实在是不需要Sevlet那层抽象。也是因为省去了一层抽象的原因,启动速度自然就是飞快了。Netty本身是一个更底层的库,未来支持Socket的话,也可以拿来就用。 有人问是不是ThoughtWorks是不是给我专门的时间写开源项目。上班时间肯定主要是给客户写代码,那我的时间从何而来。关于这个问题,最好的回答是之前的一篇blog《聊聊早起》。现在每天在5点半左右起床,上班之前大约会有一个半到两个小时做一些自己要做的事情。每天坚持下来,就会是一笔很好的时间财富。我现在基本上也是把这个做法作为一种最佳实践推荐给身边的许多人,我知道,已经有人开始从中受益了。 把自己的东西拿出来,别人会回馈给我们更多,这就是社区分享的好处。 2012年无意间开启的一个开源项目,居然让我坚持住了。我经常会兴之所至,开始写一些小项目,但如果不是有像Github之类的站点,我都不记得我曾经这么想过。但Moco,我就这么一直做下来了。回想起来,Moco从一开始就是一个相对完整的小项目,从一开始就有用户,有反馈,我也就乐呵呵地一直做着。每天为Moco写点代码已经成了我日常生活的一部分,所以,我有了超过300天连续提交。 坚持的回报是,Moco在2013年拿了两个大奖,一个是ThoughtWorks中国区技术大赛最具技术创新奖,另一个则是更具外部影响力,2013年Oracle的Duke选择奖,这个奖让更多人认识了Moco,也让Moco有了更多的用户,更多的反馈,也促使我不断地,美滋滋地继续为Moco写代码。在可见的未来,Moco还有不少要实现的东西。 启动Moco之时,我没想过这个项目可以走多长时间。一年后,Moco路越走越宽。
本期洞见作者来自:ThoughtWorks 郑晔图片来自网络。