[REST] 1.REST的起源
0. 世界上第一个网站
1990年12月20日,这一天对于现在的互联网来说意义非凡。欧洲核子研究组织(CREN)的科学家Tim Berners-Lee在一台NeXT电脑上启动了世界上的第一个网站(当然当时仅能Tim Berners-Lee自己访问),这台电脑至今仍保留在CREN,但当年那个网站已经不复存在了。鉴于这个网站的意义重大,CREN在2013年“复刻”了这个网站,并指向了原来的网址:http://info.cern.ch/。由于现在的浏览器早已不是当初的样子,所以CREN还提供了一个模拟器来模拟当时浏览这个网站是什么情形(http://line-mode.cern.ch/www/hypertext/WWW/TheProject.html),打开后如下:
哈哈,看起来是不是很酷炫的样子。
1. Hypermedia
我们注意看它的第一句话:
The WorldWideWeb (W3) is a wide-areahypermedia information retrieval initiative aiming to give universal access to a large universe of documents.
大意是说www是一个为了让全世界都能访问大量文档的一个的超媒体信息检索计划,其中重点在于其提到的hypermedia。我们看看它怎么解释hypermedia是什么的:
Hypertext is text which is not constrained to be linear.
Hypertext is text which contains links to other texts. The term was coined by Ted Nelson around 1965 (see History ).
HyperMedia is a term used for hypertext which is not constrained to be text: it can include graphics, video and sound , for example. Apparently Ted Nelson was the first to use this term too.
Hypertext and HyperMedia are concepts, not products.
其中解释了什么是hyperhtext(包含link的文本内容),又指出了hypermedia是一个术语,不仅仅指代hypermeida,还可以包括一些图像,视频,声音等等。hypertext这个术语名字并不是由Tim Berners-Lee提出的,而是在更早的1965年由Ted Nelson第一次提出这个概念(hypertext历史)。不知道大家对于hypertext这个词是不是感觉很熟悉的样子,大名顶顶的HTML(HyperText Markup Language)就是它的一个具体实现。hypertext中的link一直是重中之重,试想如果没有这样一种机制把各种文档联系起来,那么孤零零的一些文本内容是如何也不会发展出后来的互联网的。
hypermedia是web中的重中之重的一个角色,可以说没有它就没有今天的web。
2. HTTP历史的简单回顾
具体的HTTP协议最早是版本0.9,发布与1991年(HTTP 0.9 https://www.w3.org/Protocols/HTTP/AsImplemented.html)。从现在的角度看可以说是一个很简陋的协议,只支持GET请求,无request header,所以只能用来展示静态文本内容,不对对于当时来说已经足够了,毕竟当初Web建立的初衷仅仅是为了在这些科学家之间共享文档信息用的。
随着Web的迅猛发展,只读的HTTP 0.9已经无法满足Web的胃口了。在1996年HTTP 1.0诞生,最突出的改进在于支持POST来写数据了(基于HTML表单,HTML最初的标准诞生于1993年),使得Web终于“活了”起来。在HTTP 1.0协议的专家组中,有一个年轻人脱颖而出,后来成为了HTTP/1.1协议专家组的负责人。这位年轻人就是Apache HTTP服务器的核心开发者Roy Fielding,Apache软件基金会的合作创始人,也是URI协议的主要设计者,同时也参与了HTML的设计。
在1999年,Tim Berners Lee和Roy Fielding以及HTTP1.1专家组发布了HTTP 1.1版本,主要是对1.0的一些多余的设计做了一些精简和优化,比如我们现在可以在一台机器上部署多个网站,而用不同的host请求头来区分,而这个host请求头是在1.1才引入的。1.0的时候HTTP协议对网站的假设是基于一个IP对应一个网站,从来没有料到后来的一个ip会部署这么多个web站点。
HTTP 1.1从1999年至今坚挺了18年,随着越来越丰富富庞大的web,性能有点跟不上去了。后来Google搞了一个SPDY协议,在TCP和HTTP之间增加了一层,重点在于提示传输性能和增加安全性,但是却强制了采用TLS。后来制订了新版的http2,移除了强制TLS的要求,至于为什么,原因很简单,这个要求违反了REST的架构约束,至于违反了哪些约束,后面的博客会解释。
3. REST的诞生
在上面我们提到一个人:Roy Fielding,他在和他的同事们在HTTP/1.1协议的设计工作中,对于Web之所以取得巨大成功,在技术架构方面的因素做了一番深入的总结。Fielding将这些总结纳入到了一套理论框架之中,然后使用这套理论框架中的指导原则,来指导HTTP/1.1协议的设计方向,HTTP/1.1协议的第一个草稿是在1996年1月发布的,经过了三年多时间的修订,于1999年6月成为了IETF的正式规范。用来指导HTTP/1.1协议设计的这套理论框架,最初是以备忘录的形式在专家组成员之间交流,除了IETF/W3C的专家圈子,并没有在外界广泛流传。
Fielding在完成HTTP/1.1协议的设计工作之后,回到了加州大学欧文分校继续攻读自己的博士学位。第二年(2000年)在他的博士学位论文Architectural Styles and the Design of Network-based Software Architectures中,Fielding更为系统、严谨地阐述了这套理论框架,并且使用这套理论框架推导出了一种新的架构风格,并且为这种架构风格取了一个令人轻松愉快的名字“REST”——Representational State Transfer(表述性状态转移)。在这篇论文中,Fielding认为Web得以蓬勃发展的原因很大程度上得益于Web的架构设计满足了互联网规模的分布式超媒体系统的需要。而他总结整体推导出来的REST,正是Web的架构风格。
本篇先开个头,简单介绍一下web的历史,以及REST是怎么来的,干什么用的。后面会逐一解释什么笔者眼中的REST是什么,欢迎有兴趣的前来讨论。
参考资料
世界上诞生的第一个网站:http://info.cern.ch/
世界上诞生的第一个网站-模拟器:http://line-mode.cern.ch/www/hypertext/WWW/TheProject.html
Web的生日:http://home.cern/topics/birth-web
HTTP 0.9 :https://www.w3.org/Protocols/HTTP/AsImplemented.html
HTTP 历史:https://www.w3.org/Protocols/History.html
HTTP 1.1 : https://www.ietf.org/rfc/rfc2616.txt
理解本真的REST:http://www.infoq.com/cn/articles/understanding-restful-style/
Tim Berners Lee :https://en.wikipedia.org/wiki/Tim_Berners-Lee
Roy Fielding:https://en.wikipedia.org/wiki/Roy_Fielding
Roy Fielding谈Google SPDY协议:http://www.infoq.com/cn/news/2012/07/roy-on-google-spdy?utm_source=news_about_spdy-agreement&utm_medium=link&utm_campaign=spdy-agreement
架构风格与基于网络应用软件的架构设计(中文修订版):http://www.infoq.com/cn/minibooks/web-based-apps-archit-design
[REST] 1.REST的起源的更多相关文章
- Effective Objective-C 2.0 — 第一条:了解Objective-C语言的起源
第一条: 了解Objective-C语言的起源 由Smalltalk演化而来,消息型语言的鼻祖(messaging structure)而非 (function calling)函数调用 //Mess ...
- Java起源、发展历程、环境变量、第一个Java程序等【1】
若有不正之处,请多多谅解并欢迎批评指正,不甚感激. 请尊重作者劳动成果,转载请标明原文链接: 本文原创作者:pipi-changing 本文原创出处:http://www.cnblogs.com/pi ...
- atitit.GMT UTC Catitit.GMT UTC CST DST CET 星期 月份 节日 时间的不同本质and起源
atitit.GMT UTC Catitit.GMT UTC CST DST CET 星期 月份 节日 时间的不同本质and起源 1. GMT(Greenwich Mean Time)是格林尼治平时 ...
- 2016动作短片《全境封锁:特工起源》HD720P.英语中字
导演: 德文·格雷厄姆主演: Matt Lynch / Sasha Andreev / Amanda Day类型: 动作 / 短片制片国家/地区: 美国语言: 英语上映日期: 2016-01-19片长 ...
- JSP起源、JSP的运行原理、JSP的执行过程
JSP起源 在很多动态网页中,绝大部分内容都是固定不变的,只有局部内容需要动态产生和改变. 如果使用Servlet程序来输出只有局部内容需要动态改变的网页,其中所有的静态内容也需要程序员用Java程序 ...
- Spring核心框架 - AOP的起源及介绍
一.AOP技术起源 AOP技术的诞生并不算晚,早在1990年开始,来自Xerox Palo Alto Research Lab(即PARC)的研究人员就对面向对象思想的局限性进行了分析.他们研究出了一 ...
- 一篇文章让你读懂 OpenStack 的起源、架构和应用
OpenStack 是一个面向 IaaS 层的开源项目,用于实现公有云和私有云的部署及管理.拥有众多大公司的行业背书和数以千计的社区成员, OpenStack 被看作是云计算的未来.目前 OS 基金会 ...
- Hadoop 系列 - (1) - 学习随笔 - 起源、构成
起源:Hadoop是google 的集群系统的开源实现 --Google集群系统,:GFS(Google file system),MapReduce,BigTable(严格意义 ...
- Linux的起源、特点和版本号
前言 最近上陈渝老师的<高级操作系统>,需要在ucore实验平台上完成一个麻雀虽小五脏俱全的OS,本着看过一小半<30天自制操作系统>的自信,以为这不过是小case,怎料被虐得 ...
- [原创].NET 分布式架构开发实战之一 故事起源
原文:[原创].NET 分布式架构开发实战之一 故事起源 .NET 分布式架构开发实战之一 故事起源 前言:本系列文章主要讲述一个实实在在的项目开发的过程,主要包含:提出问题,解决问题,架构设计和各个 ...
随机推荐
- RF+Appium框架自动化测试系列一之(Mac下Appium环境搭建)万事开头难
消失了3个月,有一段时间没来园子更新博客了,各位看官见谅哈哈,消失是因为刚换了工作环境没外网,好多笔记没能及时的记录分享,以后有时间慢慢补上吧,这段时间主要接触了移动端app的自动化测试,公司为了快速 ...
- 用户单独管理Jenkins的某些项目
管理用户: 建立用户: 安装Role-Based Strategy插件 安装插件后,进入系统设置页面,配置如下: 在系统管理页面点击Manage and Assign Roles进入角色管理页面: 1 ...
- HDU 4662 MU Puzzle:找规律
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4662 题意: 初始字符串为"MI". 有三个操作: (1)将'M'之后的所有字符翻 ...
- android学习ViewPager的简单使用
使用ViewPager需要引入android.support.v4.View.ViewPager这样的jar包,谷歌公司为解决当前版本碎片化的问题,提供的兼容的包.主要目的就是解决向下兼容问题. 1, ...
- 解读java同步类CountDownLatch
同步辅助类: CountDownLatch是一个同步辅助类,在jdk5中引入,它允许一个或多个线程等待其他线程操作完成之后才执行. 实现原理 : CountDownLatch是通过计数器的方式来实现, ...
- mac制作icns图标
Key steps:1) Prepare a 1024x1024 png or jpeg file;2) Download fasticns utility to convert the icon t ...
- Shell Script编程——USB挂载/复制文件/查找文件/压缩文件
PS:$引用变量的时候不要加空格.用了case,while的结构. main文件 #!/bin/bash chmod a+x changedate chmod a+x changemod chmod ...
- 程序员从技术到项目管理PM--思维转变
对以往所做项目的经验做下总结,作为项目经理首先要对项目负责,思维要做下转变,要从项目全局角度考虑问题: 从个人成就到团队成就. 无论是做管理还是做技术,成就导向意识是优秀员工的基本素质.只有具 ...
- js原型学习
js中所有对象都存在一个隐式原型_ _proto_ _,指向创建这个对象的函数的原型prototype; 而函数的原型prototype都是Object函数的一个对象,也有隐式原型,指向的就是Obje ...
- Python 使用一等函数实现设计模式
案例分析:重构"策略"模式 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Helvetica } 如果合理利用作为一等对 ...