先看我对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的一点思考的更多相关文章

  1. ASP.NET 模板引擎 - NVelocity

    1,HTML的Form表单数据按Button提交数据以后,由 Action 指定的服务器端处理程序(.ashx)进行处理后 ,再响应的浏览器. 2,我们把 HTML的表单,写到 .ashx 一般处理程 ...

  2. asp .net 模板引擎 使用 Razor 生成html静态页面

    刚开始不是理解 写完之后 觉得还蛮简单的 分为这几个步骤 1.获取页面模板Html 2.获取数据 3.解析模板和数据,生成静态页Html代码 4.生成静态文件 模板形式是mvc的模式,会mvc 看一下 ...

  3. Asp.net MVC Razor模板引擎技巧分享

    Razor是Asp.net MVC中新的默认模板类型, 语法简单易用.这篇文章不涉及Razor的语法,主要介绍Razor的一些在MVC项目中的使用技巧,以及脱离MVC环境下,如何使用Razor. 阅读 ...

  4. 转 如何使用velocity模板引擎开发网站

    基于 Java 的网站开发,很多人都采用 JSP 作为前端网页制作的技术,尤其在是国内.这种技术通常有一些问题,我试想一下我们是怎样开发网站的,通常有几种方法: 1:功能确定后,由美工设计网页的UI( ...

  5. PHP实现简易的模板引擎

    PHP实现简易的模板引擎 1.MVC简介 MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式(详情自己百度): 1. Mode ...

  6. springboot:Java模板引擎Thymeleaf介绍

    Thymeleaf是一款用于渲染XML/XHTML/HTML5内容的模板引擎.类似JSP,Velocity,FreeMaker等,它也可以轻易的与Spring MVC等Web框架进行集成作为Web应用 ...

  7. 新一代Java模板引擎Thymeleaf

    新一代Java模板引擎Thymeleaf-spring,thymeleaf,springboot,java 相关文章-天码营 https://www.tianmaying.com/tutorial/u ...

  8. MVC的验证(模型注解和非侵入式脚本的结合使用) .Net中初探Redis .net通过代码发送邮件 Log4net (Log for .net) 使用GDI技术创建ASP.NET验证码 Razor模板引擎 (RazorEngine) .Net程序员应该掌握的正则表达式

    MVC的验证(模型注解和非侵入式脚本的结合使用)   @HtmlHrlper方式创建的标签,会自动生成一些属性,其中一些属性就是关于验证 如图示例: 模型注解 通过模型注解后,MVC的验证,包括前台客 ...

  9. .net 开源模板引擎jntemplate 教程:基础篇之在ASP.NET MVC中使用Jntemplate

    在ASP.NET MVC 中使用Jntemplate 上一篇我们详细介绍了jntemplate的标签语法,本篇文章将继续介绍如何在ASP.NET MVC 中使用Jntemplate. 一.使用Jnte ...

随机推荐

  1. Linux上的SQL Server的起步

    我们知道,几个星期前,微软发布了在Linux上直接运行的SQL Server第一个公开CTP版本!因此,对我来说,是时候跨界在Linux上安装我的第一个SQL安装,这样的话,我就可以在Linux上折腾 ...

  2. Oracle内置函数内容整理

    --绝对值select abs(-100) from dual; --取余select mod(8,3) from dual; --取整,大于该数的最小整数(上限值)select ceil(12.0) ...

  3. tyvj1011 - 传纸条 ——DP

    题目链接:https://www.tyvj.cn/Problem_Show.aspx?id=1011 状态转移方程: f[k,x1,x2] = max(f[k-1,x1,x2],f[k-1,x1-1, ...

  4. 加密app.config

    EncryptConnection.EncryptConnectionString(true); public static class EncryptConnection { public stat ...

  5. Uva 437 巴比伦塔 && UVA10003

    要求底面严格小于它下方立方体的长宽,求出最高情况,一块石头可以多次使用 用结构体记录一块石头的三种放置情况,按面积排序. dp[i] = max(dp[i],dp[j] + block[i].high ...

  6. 12. Application-specific scanners (特定应用程序扫描器)

    ike-scan是使用IKE协议发现.指纹和测试IPsec VPN服务器的命令行工具. 它通过向网络中的每个主机发送特制的IKE数据包来扫描VPN服务器的IP地址. 运行IKE的大多数主机都会响应,识 ...

  7. Java学习笔记 -- Java定时调度工具Timer类

    1 关于 (时间宝贵的小姐姐请跳过) 本教程是基于Java定时任务调度工具详解之Timer篇的学习笔记. 什么是定时任务调度 基于给定的时间点,给定的时间间隔或者给定的执行次数自动执行的任务. 在Ja ...

  8. WebAPI接口设计:SwaggerUI文档 / 统一响应格式 / 统一异常处理 / 统一权限验证

    为什么还要写这类文章?因为我看过网上很多讲解的都不够全面,而本文结合实际工作讲解了swaggerui文档,统一响应格式,异常处理,权限验证等常用模块,并提供一套完善的案例源代码,在实际工作中可直接参考 ...

  9. 围棋术语 & 中英文 。

    https://senseis.xmp.net/?ChineseGoTerms 一字 二字 三字 四字 一字 长(nobi,solid extension),是指仅靠着自己的棋盘上已有棋子继续向前延伸 ...

  10. js-ES6学习笔记-对象的扩展

    1.ES6允许直接写入变量和函数,作为对象的属性和方法.这种写法用于函数的返回值,将会非常方便.CommonJS模块输出变量,就非常合适使用简洁写法. var ms = {}; function ge ...