前言
6月底开始了在华为西安研究所的实习,作为为数不多的本科生,深感这次实习对我来说意义重大;
今天刚好实习一个月,记得刚刚到公司的时候,我的师父给我介绍了不少东西,可惜我纯看理论的时间不多,接着就开始跟着组里干其他一些活了,但因此我也很感谢我的师父,谢他没把我像别的实习生一样放羊放着;这一个月虽然纯粹看理论的时间并不多,但通过一些实践,加上不懂的地方就问,就查阅资料,虽然不能上外网,但内网上的好资料很多,比百度搜的要质量要好不少,所以我学习到了不少东西,现在记录下来,做个纪念,也当做个总结,顺便也把自己的学习经验分享给一些像我这样纯小白还未入门的人,争取能帮别人少走弯路;不过我对这些东西的理解还很浅,顶多就一入门的水平,所以以后工作了还是得加强学习;
RESTful架构简介
来的第一天,师父给我介绍的众多理论背景中,有一个就是RESTful架构,他给了我几篇文档,看完后我是懵逼的,完全不知所云,因为那时候我对业务背景完全不熟悉,而且对HTTP协议的了解也很有限,所以我很难理解这种开发模式的含义,直到最近我为我们组的业务做完了Jmeter的压力测试,并开始学着看他们的yaml文件,看到yaml文件里的一个个接口,一个个URL,以及参数,HTTP报文方法等,现在又开始着手进行fuzzing测试,我才开始逐渐理解这种架构;
理解所谓的RESTful架构,得从他的名字开始说起:
REST是Representational State Transfer的缩写,直接翻译过来就是“代表性的(Representational)”,“状态(State)”,“转换(Transfer)”;这几个看起来毫不相干的英文名词翻译过来单个看还行,可是一连起来怎么就如此拗口?我刚刚开始看文档的时候也是在这里懵逼了大半天,所以我们得单个理解,不过在此之前,我们得先说说REST的起源:REST的概念最早是在2000年,由Roy Fielding在他的博士论文里头提出来的,在论文的introduction中,Roy Fielding的简单介绍如下:
“This dissertation explores a junction on the frontiers of two research
disciplines in computer science: software and networking. “
(论文introduction部分的链接:http://www.ics.uci.edu/%7Efielding/pubs/dissertation/introduction.htm)
翻译过来就是:
“本文主要探索网络和软件,这两大计算机科学研究前沿的交叉部分”
意思就是这篇文章提出的REST架构,是某种情况下,计算机网络和软件的交集部分;其实确切的说,REST并不能称为一种架构标准,而是一种风格,一种把网站当做软件开发的风格;传统的软件设计是面向单机用户的,用户通过某种的交互方式,发给软件某种请求,让软件来执行某种操作,并返回给用户一个结果,这种操作方式上,其实与网站的交互方式很像,用户通过HTTP协议给服务器发送一个请求,服务器给你返回一个结果,当然结果有可能是404或者500,这就像软件运行会出Bug一样;实际上REST和HTTP/1.1协议的关系十分紧密,这在后面会有详细论述,而且Roy Fielding本人也是HTTP/1.1协议的主要设计者之一;
现在回到Representational,State,Transfer这几个词上面来,查阅一些关于REST的介绍资料后我才知道,Representational State Transfer(表现层状态转化)这一句话其实是省略了主语的,主语是“Resource”即资源,这是一个很重要的概念,我个人认为互联网上的一切通信都是以交换资源的形式进行的,或者说通信的本质就是交换资源,广义上的资源可以是看得见的实体,也可以是无实体介质的信息,这里所谓的资源,是指网络上的具体信息,对用户而言更具体的资源就是指用户通过请求想反馈得到的东西,比如一段文本,一个视频,一段音乐,甚至可以说是一种服务,广义上来讲,文本,音乐等都是一种服务请求,并且服务还远远不止从服务器硬盘上返回用户想要的资源的数据实体这么简单,它甚至可以是一段存在于服务器上的程序,比如SaaS一个典型的应用就是Office online 或者Photoshop Online,用户访问这些网站就像访问本地的客户端软件一样(当然由于技术原因,这种SaaS的体验还远赶不上本地的软件体验),当用户在线处理文字和图片时,服务器返回的对你的输入是处理后的结果,当然这样的例子还有很多;关于资源的定义差不多就是这样了。
而接下来的Representational则是指资源的表示形式;
(未完待续…)