Web服务是网络化发展趋势,也是信息时代之根本。懂得Web服务开发就是抓住了时代的尾巴,挤进了信息系统开发的殿堂。
信息的世界我不懂,面对众多的开发语言、框架和工具,我眼花缭乱,不知如何下手。有选择恐惧症的更是迷茫,一旦选择和跟进错误,再想回头又要付出的时间和精力,时间不等人啊。我就是想选择一个能够快速上手,方便部署,易于实现的开发方式,能做出一个安全稳定健壮的web服务,为开发网上办事提供支持,为方便定制公众号功能,为手机端新闻宣传搭建平台。以上所提要求貌似简单,但技术实现来不得半点虚耗,每个部分每个环节都需要安排到位考虑周全。
首先是开发语言的选择。目前,比较流行的web开发语言当属Java、PHP、Python。2017年,IEEE Spectrum 发布的研究报告显示,Python 在今年已经成为世界上最受欢迎的语言,C 和 Java 分别位居第二和第三位。其背后主要原因是人工智能兴起,推动了Python语言的迅猛发展。Python简单易学,入门容易,非常适合没有编程基础的人学习,与类Linux操作系统天然结合,其便捷的数据处理方式和函数式编程,雅号胶水语言,更大好处是有大量的功能类库,可以直接为我所用,大幅降低开发难度,网络爬虫、网络访问、语音图像识别、神经网络,以致于机器学习都信手拈来,让你真正体会事半功倍的乐趣。人生苦短,我用Python!
其次是开发模式的选择。Web服务究其本质就是生成HTML格式文本并发送用户浏览器解析和显示。最直接的方法就是事先编辑好HTML让服务器在适当时候发送给用户就可以了,但要知道,这样的HTML是静态的,是个没有任何变化的文档,好了这个就是web1.0。为实现网页与用户互动,我们将数据存放在数据库中,采用HTML模板让web服务在需要的时候去读取数据并生成相应的HTML,以上这个可理解为web2.0。传统开发模式就是web服务端程序,通过模板引擎生成HTML格式文本返回给用户端,这样的问题是,我们把界面显示效果等平面设计都甩给了服务端业务逻辑程序员,尽管很多模板引擎都尽量减轻与模板效果的耦合,但实际上没有从根本上解决问题。幸好,现在有了前后端分离式开发模式,让专业的人做专业的事,为用户前端定制页面效果及互动效果的,彻底和制定业务逻辑服务端分离开来,独立开发互不干扰,最后再通过REST API粘合到一起。说了这么多,目的就是想给大家推荐这种前后端分离的开发,具体的好处和优势性后面的教程会一一呈现,所以暂且记住我们将采用的这种开发模式。
第三是开发工具的选择。工欲善其事必先利其器,一个好的开发工具能让你开发过程变得轻松愉快,喜欢上键盘飞舞的感觉。VSCode后来居上,超过了sublime等老牌开发工具,其不仅更新升级频繁,插件更是丰富,IDE功能更是强大且全面,支持跨平台,前后端开发,各类语言环境都可以用它搞定。不得不说,这是一款出自微软的优秀精品,个人版免费使用没有任何限制,如果之前没有需要强迫使用IDE开发工具,强烈推荐这款。可以如对待宠物般慢慢养成,按照自己的使用习惯定制安装符合自己要求的插件集合,形成自己独有的web开发环境。我自在,我选择,你的选择不会错。
第四是后端开发框架的选择。Web开发是一项庞大的工程,涉及诸多应遵循的web标准及协议,传输安全、入侵防范、访问数据库等等,不建议一切从零开始。Python已经有很好很多的解决方案:Django、Flask、Pyramid,以上框架都动手实践过,并经过了项目检验。Flask小巧灵活中小型项目适用,Pyramid设计精巧可定制更强,中大型项目均能胜任,但这里还是推荐Django,理由很明显:使用Django建立的项目应用结构清晰,可以简便、快速的开发数据库驱动的Web服务,重视代码复用,有强大完整的文档体系。多个组件可以很方便以“插件”形式服务于整个框架,具有很强的可扩展性,具有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。上手后,你还会发现,它能很方便地制作出工具命令行,辅助你管理后台,太贴心了不是。总结来说,这就是一个大而全的框架,啥都替你考虑好了,为什么不选它呢?
第五是前端开发框架的选择。前端开发框架Vue2.js。在Vue官方网站上,可以看到这样的描述:Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。另一方面,Vue 完全有能力驱动采用单文件组件和 Vue 生态系统支持的库开发的复杂单页应用。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。前端的开发者都要知道,用户所看到的HTML页面实际上是HTML + CSS + JavaScript的混合体,HTML负责承载所有数据,CSS负责页面排版和效果申明,JavaScript负责让页面动起来,用户可以和页面进行互动。Vue出现之前,JQuery大行其道,通过JavaScript和类库定位元素位置,代码和数据难舍难分。Vue出现之后,分离了代码和数据,让关注点重新回到数据,只要修改数据,网页元素状态自动得以改变。更可贵的是,可以将特定的功能及样式抽象为基础组件,实现代码复用,世界再次变得如此清晰和简单。
第六是存储数据库的选择。数据库是存储用户及内容数据的地方,是web服务的数据管理基础。MySQL是当今最流行的、快速的、易于使用和易于扩展的关系型数据库,在WEB应用方面 MySQL 也是最好的,重要的是可免费使用的。它被广泛应用于许多小型和大型企业,目前属于 Oracle 旗下公司。不论是建站初期的小型应用,还是读写分离、分布式应用都有相应的解决方案,都可以轻松胜任。各类云服务环境中,都有对MySQL高度定制版本,提供备份回档、监控、快速扩容、数据传输等数据库运维全套解决方案,大大简化后期的 IT 运维工作,让你能更加专注于业务发展。当然,学院派的PostgreSQL也是可以考虑使用的数据库,其复杂查询能力更强,独有的GIS数据存储和处理模式,存储过程功能比MySQL支持更好,稳定性极强。从应用场景来说,PostgreSQL更加适合严格的企业应用场景,如金融、电信等行业,而MySQL更加适合业务逻辑相对简单、数据可靠性要求较低的互联网场景。所以,对web服务来说,合适够用就好,选择MySQL没有错。
最后是生产服务环境的选择。操作系统还在用Windows,建议你换用免费且安全的Linux,其发行版Ubuntu更是更新迅速,长久支持。关键是后者在云服务上皆有对应版本,学习曲线小,服务安全稳定。Web服务器首选Nginx,直接对用户负责,用户提交的所有请求和服务器发送的所有信息都由Nginx进行转发处理。真正提供web服务生成HTML页面及管理各项web状态的,由uWsgi服务完成。实践证明,以上方式搭建的Web服务,资源占用少,并发能力强,运行稳定,部署灵活方便,负载均衡分布部署均可以实现,各项技术配合良好。
林林总总,上面选型合并成下面的公式:Vue.js + uWsgi + Nginx + Django(Python) + MySQL + Ubuntu。实践已经证明,这是一个优秀且高效的组合。当然,在代码的世界,没有什么是最好的,只有最合适的。如果你什么都是从零开始的话,不妨按照教程的建议,跟着教程一路Happy Next,带上耐心和坚持,相信你能在web开发的路上能走的顺利,走的更远。最后,以一句话结束。我们坚持一件事情,并不是因为这样做了会有结果,而是坚信,这样做是对的。
前传:WEB开发系列1:无处不在的web服务
后续:WEB开发系列3:Python后端开发环境搭建