RESTful三理解
目录
前言
最近看了一篇很赞的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三理解的更多相关文章
- 33.服务之间的调用之RPC、Restful深入理解
33.服务之间的调用之RPC.Restful深入理解 2018年05月08日 01:52:42 郑学炜 阅读数 13577更多 分类专栏: 6.框架 版权声明:本文为博主原创文章,遵循CC 4.0 ...
- 对restful的理解
最近在学习web api,从而涉及到了restful风格,我的理解是restful风格,每个链接都会对资源进行相应的操作(CRUD),如果一个链接不包含资源,则可能不符合restful风格,借此想请教 ...
- Restful的理解,Restful 优缺点
写一下我对restful的理解,最近换工作面试的时候有问到我restful api的东西,工作中以前很多项目也是webapi + js前台控件的形式构建系统.实际上感觉restful太“理想化”,用起 ...
- RESTful的理解
REST(Representational State Transfer ),有中文翻译为"具象状态传输"(也有:"代表性状态传输").是由 Roy Thoma ...
- RESTful三问
我觉得学习一个技术,其实就是要弄明白三件事情:是什么(what),为什么(why),怎么用(how).正是所谓的三W方法. 所以打算总结一个"三问"系列.为了自己学习,也分享给别人 ...
- 关于RESTFul初步理解
RESTFul架构:是目前最流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以正得到越来越多网站的采用. 即:Representational State Transfer 表现 ...
- RESTful 架构理解
REST中的关键词: 1.资源 2.资源的表述 3.状态转移 资源: "资源",可以是一段文本.一张图片.一首歌曲.一种操作.你可以用一个URI(统一资源定位符)指向它,每种资源对 ...
- RESTful 个人理解总结
一.什么是RESTful 面向资源 简单的说:RESTful是一种架构的规范与约束.原则,符合这种规范的架构就是RESTful架构. 先看REST是什么意思,英文Representational ...
- RESTful 个人理解总结【转】
转自:http://www.cnblogs.com/wang-yaz/p/9237981.html 一.什么是RESTful 面向资源 简单的说:RESTful是一种架构的规范与约束.原则,符合这种规 ...
随机推荐
- Redis数据类型:Hashes、Geo操作指令
Redis数据类型:Hashes.Geo操作指令 Hashes常用操作指令 Redis Hashes是一个键值对的映射表,最对能存储2^32-1(约40亿)个键值对. HSET HGET HSET:将 ...
- windows10驱动精灵装完驱动后重启一直诊断修复中。。。完美解决
给公司电脑重装完系统后安装惯例开始打驱动,用的是驱动精灵,一切顺利,安装完成后重启,结果出问题,正在诊断我的电脑,无法诊断 然后我进入疑难解答 高级选项--启动设置 然后按7禁用驱动签名,成功进入系统 ...
- [Python3] 015 冰冻集合的内置方法
目录 0. 前言 英文名 元素要求 使用限制 返回 方法数量 1. 如何查看 frozenset() 的内置方法 2. 少废话,上例子 2.1 copy() 2.2 difference() 2.3 ...
- SpringBoot(九) -- SpringBoot与数据访问
一.简介 对于数据访问层,无论是SQL还是NOSQL,Spring Boot默认采用整合Spring Data的方式进行统一处理,添加大量自动配置,屏蔽了很多设置.引入各种xxxTemplate,xx ...
- A + B Problem II(1002)
Problem Description I have a very simple problem for you. Given two integers A and B, your job is to ...
- P3188 [HNOI2007]梦幻岛宝珠
传送门 注意到 $a,b$ 不大 考虑对每一个 $a*2^b$ 的 $b$ 分别背包 设 $f[i][j]$ 表示只考虑 $b=i$ 的物品时,容量为 $j= \sum a$ 的最大价值 这个就是普通 ...
- JavaScript基础4——省市联动
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- java 回调的原理与实现
回调函数,顾名思义,用于回调的函数.回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数.回调函数是一个工作流的一部分,由工作流来决定函数的调用(回调)时机. 回调原本应该是一个非常简 ...
- Centos安装ifstat统计网络流量
原文地址: http://www.winvps.org/post/504.html 下载 ifstat , http://gael.roualland.free.fr/ifstat/ifstat-1 ...
- python __str__repr__ 区别
__str__ __repr__ 两个内置函数都是调试常用的函数, 对象直接调用时会调用 __repr__的内容, __str__需要print一下对象才可以 两个函数的内容有时会写成相同内容 _ ...