关于html、asp、php模板引擎、aspnet mvc、REST的一点思考
先看我对REST的一点认识,下面是《rest实战》 这本书的序言文字:
在我刚刚开始从事解决计算问题的时候,业界就有很多人有一个愿望:将系统设计为能够被自由组合的组件。互联网(Internet)无远弗届的广泛连接为这个愿望推波助澜,并且增加了一个新的愿望:使得组件在引入了延迟和不可靠性的网络之上也能正常工作。人们尝试了这个世界上的很多系统,其中的许多系统都失败了——通常伴随着悲伤的啜泣。
一个伟大的成功案例是WWW(WorldWideWeb,万维网)。它的成功既渗透进了商业运转之中,也渗透进了流行文化之中。它为人们提供了一个机会:在全球范围内以几乎任意预先安排的协作方式从很多来源获取信息。
正如我们现在所知道的,Web并非是计算问题的全部或者终极的解决方案,但是有很多人相信Web给我们上了重要的一课,即如何构造一个由网络化的组件组成的系统。很多人利用了Web的协议——HTTP来连接系统。但是有一些人认为我们应该更进一步,不仅仅将HTTP作为一种便于使用的数据通道,而是拥抱Web本身正常工作的方式,将其作为系统协作的基础。
这种思想集合在“REST”这个名字下,它所指的是RoyFielding的博士论文,这篇论文被提及的次数远远超过了它真正被阅读的次数。追随REST的原理成为了日益增长的共识,它为网络化的组件正常工作开辟了一条硕果累累的大路,而这条大路正建立在Web自身的巨大成功之上。
这个愿景是很有吸引力的,但是为了达到目标还需要做很多事情。我们必须理解REST的原理,并且思考如何将其应用到系统集成每天所要解决的问题之上。这就是本书的作者所承担的任务:将REST从一个有吸引力的愿景变成一个已经实现的系统。他们已经做了很多,教会了我如何从资源的角度思考,如何使用HTTP的惯用语(idiom),以及超媒体控件(hypermediacontr01)的重要性。作为阅读的结果,本书将为你应用REST思想的核心元素打下坚实的基础。
REST”是一种思想,运用到开发上就是一种架构风格。
1)而使用“REST”的目的是什么了?
通过上面这段文字可以得出就是用来开发大量的网络化组件,这样以后一个系统的设计就只要对这些网络化组件进行自由组合就可以了。
比如:现在大部分的互联网公司,阿里、百度、腾讯、优酷、新浪等都开发了自己的开发平台,对公布了很多业务接口提供给开发者进行二次开发,我们可以想象成这些接口就是我们系统中的组件,自己开发一个系统的时候直接用这些组件就可以了;当然现在这些网络组件还不是很多,不能完全满足支撑一个系统,但只要以后各个公司都遵循这种思想去做的话,系统的组件化是迟早的事。
2)互联网早就有了,那为什么REST现在才被提出来了?
这我们就要回过头来看一下整个Web开发过程,从中寻找我们需要的答案。
互联网刚开始只是大家用来对文件、文字、图片等资源进行分享的,所以那时候的网页基本都是用HTML编写的静态页面,每一个url地址都是对应着一个唯一的资源,可能是一篇文章,也可以是一张图片。用现在的REST来看那时候的互联网是完全符合这种思想的。
让互联网紧紧做资源的分享,是不够的,我们还要在上面进行交互,业务处理等,那么动态脚本随之产生,代表就是现在还存在的asp 、php、aspnetmvc等。
现在重点讨论asp、php模板引擎、aspnet mvc三者产生的原因,从而解答上面提出的问题。
asp是微软为了迎合市场推出的动态脚本语言,在自家的IIS服务器运行。原理也很简单,就是发送url请求后,IIS接收对地址中指定的asp文件进行编译,把里面的asp脚本代码转换为html代码再返回给浏览器。这样我们通过编写asp脚本就可以实现与前端的交互了,但是后来发现编写这种动态脚本是很痛苦的,调试麻烦,代码阅读性差,功能不好重用等。要解决这个问题就得把界面代码与动态脚本代码进行分离,那么就出现了模板引擎、MVC等程序结构。
个人觉得看php代码就是要先弄清楚代码中使用了什么样的模板引擎,把这个弄清楚后下面的代码就很顺畅了,不然总感觉云里雾里,找不到程序的脉络。
觉得MVC应该是在模板引擎之后出现的,模板引擎只是解决了后台业务代码与前台界面代码直接的分离,而MVC对这些内容做了更明确的定义,把前台界面代码定义为View、后台业务代码定义为Model、再就是对界面的交互控制用Controller来处理。所以MVC成为了如今开发大一点的web系统的主流框架;
我们从语言谈到了程序结构,这跟我们想说明的REST又有什么关系了?
很有关系,前面我说html时代其实是完全符合REST思想的,而到后面的asp、php、mvc就反而脱离了REST思想了。REST要达到组件化的目的,资源必须唯一标识,而动态语言,更确切的说是模板引擎、MVC完全打破了这种原则,因为他们是从业务功能的角度来设计程序的,这种设计使资源的访问动态化了,而这种动态的规则又只有程序设计者清楚,所以要想把这种功能组件化是不可能的;而现在Web系统原来越多,也离当初的设想原来越远所以重新提出REST这个概念,让我们不要在岔路上越走越远;
总结:系统组件化在桌面时代一直没能够实现,而在互联网时代是完全有可能成功的,因为互联网的精神就是“开放、平等、协作、分享”。
本文章只是一个即兴所想,拿出来和大家分享一下,里面的观点不一定正确,请大家指正~~
整过过程就是这样的,互联网刚开始的时候还是符合REST的,随着动态脚本的技术发展,设计的程序原来越偏离REST,所以现在重新提出REST,但不可能回到老路,那么就要把现在MVC技术改造为支持REST的一种新架构。
关于html、asp、php模板引擎、aspnet mvc、REST的一点思考的更多相关文章
- ASP.NET 模板引擎 - NVelocity
1,HTML的Form表单数据按Button提交数据以后,由 Action 指定的服务器端处理程序(.ashx)进行处理后 ,再响应的浏览器. 2,我们把 HTML的表单,写到 .ashx 一般处理程 ...
- asp .net 模板引擎 使用 Razor 生成html静态页面
刚开始不是理解 写完之后 觉得还蛮简单的 分为这几个步骤 1.获取页面模板Html 2.获取数据 3.解析模板和数据,生成静态页Html代码 4.生成静态文件 模板形式是mvc的模式,会mvc 看一下 ...
- Asp.net MVC Razor模板引擎技巧分享
Razor是Asp.net MVC中新的默认模板类型, 语法简单易用.这篇文章不涉及Razor的语法,主要介绍Razor的一些在MVC项目中的使用技巧,以及脱离MVC环境下,如何使用Razor. 阅读 ...
- 转 如何使用velocity模板引擎开发网站
基于 Java 的网站开发,很多人都采用 JSP 作为前端网页制作的技术,尤其在是国内.这种技术通常有一些问题,我试想一下我们是怎样开发网站的,通常有几种方法: 1:功能确定后,由美工设计网页的UI( ...
- PHP实现简易的模板引擎
PHP实现简易的模板引擎 1.MVC简介 MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式(详情自己百度): 1. Mode ...
- springboot:Java模板引擎Thymeleaf介绍
Thymeleaf是一款用于渲染XML/XHTML/HTML5内容的模板引擎.类似JSP,Velocity,FreeMaker等,它也可以轻易的与Spring MVC等Web框架进行集成作为Web应用 ...
- 新一代Java模板引擎Thymeleaf
新一代Java模板引擎Thymeleaf-spring,thymeleaf,springboot,java 相关文章-天码营 https://www.tianmaying.com/tutorial/u ...
- MVC的验证(模型注解和非侵入式脚本的结合使用) .Net中初探Redis .net通过代码发送邮件 Log4net (Log for .net) 使用GDI技术创建ASP.NET验证码 Razor模板引擎 (RazorEngine) .Net程序员应该掌握的正则表达式
MVC的验证(模型注解和非侵入式脚本的结合使用) @HtmlHrlper方式创建的标签,会自动生成一些属性,其中一些属性就是关于验证 如图示例: 模型注解 通过模型注解后,MVC的验证,包括前台客 ...
- .net 开源模板引擎jntemplate 教程:基础篇之在ASP.NET MVC中使用Jntemplate
在ASP.NET MVC 中使用Jntemplate 上一篇我们详细介绍了jntemplate的标签语法,本篇文章将继续介绍如何在ASP.NET MVC 中使用Jntemplate. 一.使用Jnte ...
随机推荐
- 如何解决ASP.NET网站'__doPostBack' is undefined的脚本错误
最近碰到一个很奇怪的问题! 新发布一个ASP.NET的网站,基于.net 4.0 framework,基本没有用到什么特别新的技术,但是由于给客户预览用的服务器比较老,操作系统用的是Windows 2 ...
- 【原】关于使用jieba分词+PyInstaller进行打包时出现的一些问题的解决方法
错误现象: 最近在做一个小项目,在Python中使用了jieba分词,感觉非常简洁方便.在Python端进行调试的时候没有任何问题,使用PyInstaller打包成exe文件后,就会报错: 错误原因分 ...
- atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerException
atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerException #--现象 java.lang.NullPoint ...
- paip.php 5.0 5.3 5.4 5.5 -6.0的新特性总结与比较
paip.php 5.0 5.3 5.4 5.5 -6.0的新特性总结与比较 PHP5的新特性 2 · 对象的参照过渡是默认的(default) 3 · 引入访问属性的限制 3 · 引入访问方法的限 ...
- 修改JSONArray里所有key的值
下面举一个代码的列子目的是实现如下功能: [{"userId":1,"userName":"plf"},{"userId" ...
- 每天一个linux命令(5):rm 命令
昨天学习了创建文件和目录的命令mkdir ,今天学习一下linux中删除文件和目录的命令: rm命令.rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所 ...
- GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例
转:http://www.tuicool.com/articles/NVVnMn (1)GCD实现的同步异步.串行并行. ——同步sync应用场景:用户登录,利用阻塞 ——串行异步应用场景:下载等耗时 ...
- Python:如何显示进度条
首先,推荐一个组件:progressive 效果如下: 进度条和一般的print区别在哪里呢? 答案就是print会输出一个\n,也就是换行符,这样光标移动到了下一行行首,接着输出,之前已经通过std ...
- 了解 JavaScript (5)– 翻转器(rollover)
用 JavaScript 最常用的效果就是,当用户将鼠标移动到图片上时,会改变网页上的图像,这样页面就能对用户的操作及时作出反应,这种称为 翻转器(rollover)效果很容易实现,而且有很多应用场合 ...
- 配置CENTOS YUM更新源
众所周知,Centos 有个很方便的软件安装工具 yum,但是默认安装完centos,系统里使用的是国外的centos更新源,这就造成了我们使用默认更新源安装或者更新软件时速度很慢的问题. 为了使用 ...