在过去的一段时间里,使用Lua语言开发WEB程序。原因是因为我们需要写一个WEB的防火系统,其中的一个实现方案是 Openresty+lua的方案。

Openresty是一种高性能的WEB服务器程序,和Nginx有着很深的渊源,简单的理解的就是Openresty 使用了Nginx的核心模块,外加了其他的一些服务部件,最主要的是Openresty支持使用Lua编写WEB程序,来处理用户的请求,也真是因为这个原因,被我们选做WEB防火墙的一个实现方案。

其实,写这个文档的目的,不是单纯的追求说明一下Lua的WEB程序怎么编写,还有Lapis框架如何使用,如果是这个目的来看,可以直接去独Lapis的英文文档,从学习和实用角度来看也是效率最高的。

而这篇文档的目的,是想通过Lua语言和Lapis框架来做个实践,从设计角度和实现角度,来分析实际的WEB开发,我们都需要解构出那些任务,以一个怎样相对共同的标准来看,那些语言工具或是框架的设计,能更好的完成WEB开发工作。(WEB防火墙系统)

这些标准和设计的原则,其实是具有共性的,甚至和语言都是无关的,语言作为一种工具,哪种语言的特性是有力于我们的想法和任务的实现才是我们关心的重点。在这一点上和那些信奉PHP是世界上最好的语言的同志,还是有有些差异。

当下的WEB开发分为前段开发和后端开发,而这种划分是,有的是从完成任务的人的来划分的。而对我们来讲,无论是WEB的前端还是后端,都是一个整完的任务集合。在以往的过去,人们为了更好的分解开发任务,常常提了一个很重要的软件设计模式,MVC模式,是否支持MVC开发也成为衡量一个WEB框架的标准。

对我们来讲,无论是不是WEB程序,都会涉及到,程序有输入和输出,还有中间的业务数据处理。而对于WEB程序来说,有一个比较固定的BS模式,用户通过浏览器browser发送http协议的格式数据给WEB server。

1.WEB程序的输入。

WEB程序的输入,最主要的数据源来自于用户的请求,WEB程序存在的一个主要的意义就是响应用户的交互。取得用户的输入数据事关紧要。(框架应提供的服务)

而对于服务器本地运行的WEB程序,输入也可能来自于数据库,本地文件,其他协议传过来的数据,(比如RabbitMQ的STOMP协议数据)

2.WEB程序的输出。

WEB请求可以分为静态的请求和非静态的请求,静态的请求譬如,对静态HTML的请求,对图片文件的请求。非静态的请求,譬如数据库请求和一些在后端服务器的运算和数据处理等。而我们重点的讲的应该是动态的WEB程序,而重点的重点是,当后端程序接受输入数据,处理后要再次呈现给用户。(框架应提供的服务)

3.WEB程序的数据业务处理。

当取得输入后,程序需要的任务就是对数据的处理,这是动态WEB程序很重要的工作内容。在取得同样的数据的前提下,这时候往往就能体现出一个语言的效率和一个框架解决问题设计的合理性。

所以说,语言本身,和语言的框架都对这个效率有影响,之后会用C语言CGI,LUA和Python进行对比说明。WEB框架会用Lua lapis和Python的Django,Tornado,Flask比较说明。

经过归纳总结,一个WEB框架至少需要有一下的特性,也基于这三点展开讨论。

1.便捷的取得用户提交的数据。

2.可以提供模板渲染模块给用户显示反馈数据。

3.WEB提供足够充分的部件解决WEB数据处理的问题。

下面,Lapis。

==============================================

现在是2017年2月,以上这些字都是很久之前写的,Lapis很好,但经过几个阶段,决定重新写一个建单的类似于Flask这种框架,来支持某些业务,这部分内容可能之后会被命令为Hi Lua。

2017/03/02

==============================================

实际上,Lapis框架是由MoonScript而写的,针对MoonScript语言与Lapis框架的实践的文章,都汇集到了一个专题网站 MoonScript 这个网站上。

而HiLua框架一些基本性文章发布到了另一个网站 CandyLab

相关的内容还在增加变更中。

作者:糖果

PS:转载到其它平台请注明作者姓名及原文链接。

cat ***.log ​​​​
cat ***.log ​​​​