基于Flask开发基因组数据web服务的RESTful API(1)

这真的是一个系统工程!

首先,我要开发一个在线的基因组数据库,目的是能够以符合RESTful API设计准则来进行访问的数据Web服务。虽然,此前我没接触过任何Web开发,想想也是困难重重,但这并不能阻止我——兴趣所在,而且我自己也更清楚需求是什么。

那么说干就要干。经过一番有限的比较之后(主要是看各种技术论坛和博客),我发现RailsDjangoFlask都适合用来干这个事情,他们的文档都很好,是目前Web开发的主流,社区活跃,用的人多了碰到问题也容易找到解决方案,但是觉得Rails和Django太大,太系统,以至于冗余,我希望的是微框架,因为初步搭成只是第一步,后面一定会有很多自定的优化和开发,而不是一次就完成,太冗余不灵活的话反而会极大影响自己的后续步骤,灵活的可拓展性对我而言反而更重要。这么考虑之后,我就选了Flask,其他的组件需要的时候加入即可,还可以随时换掉,或者自己重写,而且项目结构是完全自定的,这就很适合我的口味了,框架功能不需多,只要解决了Web开发中最重要的问题,作为一个最小可行集就OK——就像人体肠道最小宏基因组一样,浓缩即是精华,其他的枝叶要能够被灵活地删增。

那么选好之后,接下来我是怎么做的呢?第一,学会了Flask,读了很多技术博客,操练了一些如何例子,比如使用 Python 和 Flask 设计 RESTful APIThe Flask Mega-Tutorial等,同时读了《Flask Web开发:基于Python的Web应用开发实战》,这对于我这种从未接触过Web应用开发的小白来说,真是一本好书,读了之后真是有一种相见恨晚的感觉,内容很好读[但我并不是说它读起来容易。虽然它确实是从基础的讲起,然而对我这类没有任何基础的人来说并不十分容易,好在]从开发到测试到部署每一步都十分清晰,很多内容讲得比博客清楚得多多了,而且整本书本身就是项目驱动的,就像我也是项目驱动要去用Flask一样。
第二,要学会数据库。其实这一步和前面是分不开了,基本都是同时进行。但在选择使用那种数据库这一步中我也花了不少心思,最后按照我的数据情况,我选择了非关系型数据库MongoDB。

在这个一周多的学习时间中(工作之外的时候),我学到了很多,不但实现了一个完整的Web应用,还进一步加深加强了对如何更有效应用python的理解和认识。对我提升最大的还不是会了如何用flask去做一个简单的web,而是它们的设计理念,程序/项目如何布局,如何分离,如何做到低耦合,测试和性能分析应该怎么做才合理有效,这些理念是我们平时做基因组数据分析所缺少(马虎)的,因为本来许多生物信息工程师并不懂web开发,甚至从未有过任何IT软件设计的训练,平时也难有时间专门去学习,很多时候都是,任务来了要赶紧写个程序解决一下,然后再来一个任务,又再写个程序处理一下,如此反复,时间久了这些零散的程序根本难以复用,最后慢慢地也就成了垃圾程序。就算是比较大型的生信软件的开发,过程和布局也欠缺规范,关于这一点我深有体会,也想抽时间去系统学习,但实际操作起来并没严格注意,更多的是直接参看github上一些项目的布局和设计来依样画葫芦而已。

接下来就难了,要做符合RESTful API准则的数据web服务,那么就得开始设计API了。怎么做?不同版本如何管理,如何语义化,如何条理化管理新旧版本的内容和功能?如何把基因组数据资源转换为JSON格式的序列化字典,大数据资源如何分页等等诸多的细节都需要一一考虑,我参考了Solvebio23andme豆瓣等,最后得到了我自认为比较合理的设计方式。

(未完待续)