目录

  • 目录
  • 前言
  • Web应用的会话状态
    • Cookie
  • 资源的表现形式
  • HATEOAS
  • RESTful
    • 资源
    • URI

前言

最近看了一篇很赞的RESTful博客,传送门:http://www.cnblogs.com/artech/p/3506553.html
本篇是RESTful的又一次理解笔记,将之前写过的文章做一个总结和消化,应该是关于RESTful的最后一篇基础理论文章,之后会向实践倾斜,通过编写Python RESTful API来更好的消化理论。
本篇继续探究为什么会将这种Web Service设计风格命名为RESTful(REpresentational State Transfer 表现层状态转化)
在解决这个问题之前,首先需要认识几个概念。

Web应用的会话状态

会话(Session):指Client浏览器和Web Server之间连续发生的一系列请求个响应过程。
会话状态:指Client浏览器与Web Server在会话过程中产生的状态信息,这些状态信息是Web Server能够把属于同一个会话中的一系列请求和响应关联起来。
会话跟踪:用于跟踪用户的整个会话过程,常用的会话跟踪技术有Cookie、Session 。
因为在RESTful的无状态原则,Web Server不会保存任何的会话状态。所以RESTful一般使用Cookie来解决会话状态的保存。

Cookie

Web应用使用的HTTP是一种无状态协议,这意味着Web Server将对页面的每个HTTP请求当作独立的请求进行处理;服务器不保留与先前请求所使用的任何变量值有关的信息。使得Client和Server一旦完成了数据交换,他们之间的连接就会关闭,再次交换数据时,需要先建立新的连接。这造成了Client与Server无法从连接上跟踪会话。这就需要引用一种机制,来将无状态的HTTP连接,建立起联系(跟踪),避免会话间的混淆。
所以在Web应用中会话跟踪是必不可少的,会话跟踪能够保证每一个会话的独立性(一个用户的所有请求操作都属于同一个会话)。而Cookie能够弥补HTTP无状态传输的不足,在Client中创建一个文本文件来用于存贮Client浏览器与Web Server之间的联系。
Cookie原理:为每一个Client浏览器颁发一个通行证(ID Card),当Client浏览器向Web Server发送请求时候都必须带上自己的通行证,这样Web Server就能够通过请求中的通行证来确定Client的身份。
Cookie的实现:Client浏览器向Web Server发出请求,如果Web Server需要记录该Client用户的状态时,就会使用response向Client颁发一个Cookie,Client浏览器会将Cookie文件保存起来。这样当Client浏览器再次向Web Server发出请求时,就会将Cookie包含在请求中一同发送给Web Server。Web Server就能够通过请求中的Cookie来辨认用户状态,即识别Client的身份。

资源的表现形式

超链接:超链接在本质上属于一个网页的一部分,它是一种允许我们与其他网页或站点之间进行连接的元素。所谓的超链接是指从一个网页指向一个目标的连接关系,这个目标可以是另一个网页,也可以是相同网页上的不同位置,还可以是一个图片,一个电子邮件地址,一个文件,甚至是一个应用程序。
超文本:超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本。超文本更是一种用户介面范式,用来显示文本及与文本之间相关的内容。现在超文本普遍以电子文档方式存在,其中的文字包含有可以链结到其他位置或者文档的连结,允许从当前阅读位置直接切换到超文本连结所指向的位置。我们日常浏览的网页上的链结都属于超文本。
超媒体:超媒体是一种采用非线性网状结构对块状多媒体信息(文本、图像、视频等)进行组织和管理的技术。超媒体在本质上和超文本是一样的,只不过超文本技术在诞生的初期管理的对象是纯文本,所以叫做超文本。随着多媒体技术的兴起和发展,超文本技术的管理对象从纯文本扩展到多媒体,为强调管理对象的变化,就产生了超媒体这个词。在RESTful之中超媒体作为资源的表现形式。

HATEOAS

Roy Thomas Fielding博士将REST定位为Distributed Hypermedia System(分布式超媒体应用)并在《Architectural Styles and the Design of Network-based Software Architectures》中提出了HATEOAS(Hypermedia as the engine of application state 超媒体作为应用状态的引擎)的概念。
应用状态:指的是Web Client的状态,可以理解为会话状态。
在Web Server中被Resource Request Handler确定的概念性实体(资源),以超媒体(Hypermedia)的形式展现在Client浏览器。当我们在Client中点击超媒体的链接(URI)时,就可以获取被链接(URI)关联的资源或者可以对资源进行特定的操作。获取的资源或者经特定操作响应后的资源在经过同样Resource Request Handler确定表现的形式(XML/JSON格式等)后,以超媒体的形式在表现在Client的浏览器中。而这种资源内容或形式的改变都会导致Client会话状态的改变,所以说超媒体成为了驱动Client会话状态转换的引擎(应用状态的改变基于超媒体的改变)

RESTful

因为超媒体作为资源在Client中的表现形式,所以Client应用状态的转换体现为Client浏览器中呈现资源的转换。而且资源对应的超媒体表现格式是由Web Server中的表现层决定的,如果将超媒体进一步抽象成一般意义上的资源呈现(Representation )方式,那么Client应用状态变成了可被呈现的状态(REpresentational State)。Client应用状态之间的转换就成了可被呈现的状态装换(REpresentational State Transfer),这就是REST。 —— 摘自博文《我所理解的RESTful Web API [设计篇]》

资源

资源寄存于Web Server,可以是一个具体的事物,如:文件、音乐、视频这也再次说明了超媒体是资源的表现形式。当然资源也可以指一个抽象的流程。

URI

是资源的唯一标识。URI具有标志性、可读性、可寻址性。
标志性:可以标识某个独立的资源,也可以标志一组资源的集合式资源容器(复杂型资源)。
可读性:RESTful的URI用于标识资源,所以URI中应该尽量使用名词来描述一个资源的类型,避免使用动词。
可寻址性:URI包含了URL的特性,可以定位寻址到某一个具体的资源位置。

RESTful三理解相关推荐

  1. Restful的理解,Restful 优缺点

    写一下我对restful的理解,最近换工作面试的时候有问到我restful api的东西,工作中以前很多项目也是webapi + js前台控件的形式构建系统.实际上感觉restful太"理想 ...

  2. restful 简单理解

    越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency).高 ...

  3. restful RESTful的理解

    REST(Representational State Transfer ),有中文翻译为"具象状态传输"(也有:"代表性状态传输").是由 Roy Thoma ...

  4. spring boot 项目源码_Spring Boot2 系列教程(三)理解 Spring Boot 项目中的 parent

    前面和大伙聊了 Spring Boot 项目的三种创建方式,这三种创建方式,无论是哪一种,创建成功后,pom.xml 坐标文件中都有如下一段引用: <parent><groupId& ...

  5. RESTful再理解

    目录 目录 前言 RESTful的目的 REST的含义 表现层 状态转化 无状态协议HTTP 最后 前言 这是在经过一段时间的积累后,对RESTFul框架的再一次更深入的理解.希望能够将零散的知识点连 ...

  6. RPC和Restful深入理解

    一.RPC RPC 即远程过程调用(Remote Procedure Call Protocol,简称RPC),像调用本地服务(方法)一样调用服务器的服务(方法).通常的实现有 XML-RPC , J ...

  7. 什么是restful?说说你对restful的理解

    目录 什么是restful?说说你理解的restful APIview里如何获取http里的数据? 为什么APIview里获取的数据可以直接当做字典操作? 什么是restful?说说你理解的restf ...

  8. 对Restful的理解

    什么是Restful? Restful是Roy Thomas Fielding这位大神在他的博士论文文中提出来.由于其超前的思想,在当时并未引起过多的注意. 直到近几年来,大概08年以后开始慢慢流行起 ...

  9. 我论矩阵 矩阵变换的飞跃 三 理解矩阵变换 (终)站在对立面 一扇新的大门

    警告 以下内容已超越矩阵变换存在,不能保证其正确性,仅代表一种看法. 我们需要知道,能够形成一整套完整理论的,都是很成熟的,往往研究了几十几百年的,但是有些很新很前沿偶尔很强大的,有时理论残缺不全,甚 ...

最新文章

  1. python解释器工作原理_Python解释器执行原理
  2. 毒瘤题No.006-byFHS
  3. mysql如何创建简单索引_mysql 如何创建索引呢,这个其实很简单
  4. Xss-labs闯关总结
  5. LiteIDE 在 Windows 下为 Go 语言添加智能提示代码补全
  6. redis内存行数据库细节
  7. 【Web动画】SVG 实现复杂线条动画
  8. linux虚拟机 xen,XEN虚拟机在Linux上的安装和使用教程分享
  9. Android中使用shape来定义控件的显示属性
  10. echarts-formatter
  11. Visio安装失败问题解决
  12. 笔记本计算机bios设置,小技巧:关于笔记本BIOS设置的三招
  13. 大学生静态HTML网页源码——佛山旅游景点介绍网页代码 家乡旅游网页制作模板 web前端期末大作业
  14. 匿名四轴上位机使用方法
  15. h2o api java_h2o 准备
  16. leedcode.203移除链表元素
  17. 靠这个方法,我终于月入3万!
  18. Arrays.sort排二维数组
  19. 2018 Macbook pro 15(10.13.6)安装Nvidia 1070(Aorus Gaming Box)显卡驱动
  20. android与ios系统优缺点,安卓系统与苹果iOS系统的差别,谁更好用?为什么系统会卡顿?...

热门文章

  1. UIPickerView隐藏透明条
  2. 方舟服务器如何修改恐龙,方块方舟人物及驯养恐龙属性修改教程 人物属性怎么修改_游侠网...
  3. 在动作观察,运动想象和站立和坐姿执行过程中解码脑电节律
  4. 上海交大情感脑电数据集(SJTU Emotion EEG Dataset,SEED)
  5. 想拥有一台属于你自己的无人机嘛?
  6. 人民大学提出听音识物AI框架,不用人工标注,嘈杂环境也能Hold住,还可迁移到物体检测...
  7. 都在说GPT-3和AlphaFold,2020没点别的AI技术突破了?
  8. 初二男生为外婆发明认人神器,帮认亲人,20分钟召唤回家,并报出家庭地址...
  9. 今晚19:30直播 | 这些国家为何今年扎堆去火星?航天专家庞之浩揭秘
  10. 专访阿里达摩院聂再清:不能让每个人无差别享受AI,是程序员的耻辱