初识 REST(Representational State Transfer)


REST,直译过来就是“表述性状态传递”。
然而,这到底是个什么鬼?它又有什么卵用呢?(写这篇博客的笔者此时有点烦躁...)
且听笔者细细道来...


铺垫###

作为相关基础很少的我,在学习这个新概念时,首先先学习了这么几个相关知识:

1.URI(统一资源标识符)

顾名思义,互联网中的URI是一种用来表示网络资源的字符串。这些互联网上的资源可以包括 HTML 文档、图像、程序等都可以利用URI唯一的标识出来。
这种用来标识资源的字符串是需要按照一定的规则进行书写的,例如:

协议://主机IP/资源存储路径

上述形式就是一种URI的标识形式,称为URL 。这种形式也是目前最广泛采用的网络资源定位形式。当然,还有一种URN(统一资源名称)表示形式。
但总的来说,URN和URL都是URI的表现形式,也是URI的子集

2.资源多重表述

对于这个名词,可以从两个方面去理解:

  • 什么资源?
  • 多重表述是什么?

明白了问题,那么就来一一解答。
所谓资源,当然是指网络资源(数据、文字、图片等),那么网络资源在哪里?说大一点,那无非是进行网络通信的两端——客户端和服务器端。

那么多重表述呢?也可以从两个方面来看:

  • 什么是多重?
  • 表述又是什么意思?

这次我们倒着看,“表述”作为一个动词,必然需要宾语,那么这里所要被表述的自然是“资源”。所以,要对网络资源进行表述,一般来说都是通过某种特定格式的文件或数据。也就是说这里的表述,即将网络资源转换成某种特定格式的文件或数据
下来轮到“多重”了,所谓多重,必然对应着单重或单一,再看看它所修饰的是“表述”一词,也就是说资源单一表述是将网络资源转换成那种特定格式的文件或数据;那么,资源多重表述就是将网络资源转换成不同的特定格式的文件或数据。
那么这个“特定的”又是如何特定呢?
一般来说,都是根据通信某端对于数据格式的需求来定。
至此,再将所有的分析拼起来,资源多重表述,即
根据不同的需求,对于网络通信端的同一网络资源做出对应的格式转换。
例如:

GET /customers/1234 HTTP/1.1
Host: examplecom
Accept: application/vnd.mycompany.customer+xml

GET /customers/1234 HTTP/1.1
Host: example
com
Accept: text/x-vcard

3.无状态(stateless)通信

要理解无状态通信,首先要清楚什么是“状态”?
要注意的是,这里的状态不是网络通信里所说的类似HTTP状态码(200、404等)的状态(status),而是指RESTful架构中的state。该架构中的state分为两种:应用状态资源状态

  • 应用状态:指与某一特定请求相关的状态信息。
  • 资源状态:反映了某一存储在服务器端资源在某一时刻的特定状态,该状态不会因为用户请求而改变,任何用户在同一时刻对该资源的请求都会获得这一状态的表现。

无状态通信要求在网络通信过程中,任意一个Web请求必须与其他请求隔离,当请求端提出请求时,请求本身包含了响应端为响应这一请求所需的全部信息

由于无状态通信要求请求端要携带所有响应此请求需要的信息,所以与该请求相关的状态信息(应用状态)都应该被此请求所携带。

这就好像请求端是一个带着海鲜(应用状态)的顾客,他需要找一家海鲜加工的响应端餐厅(请求),餐厅中会自备一些料理通用的作料(资源状态)。最终,他找到一家响应端餐厅,将海鲜交给餐厅,餐厅用自己的作料加工海鲜(处理请求),并交给顾客享用(响应)。

所以,这里所谓的“无状态”通信就是指响应端不必存储请求端所需用来理解请求的信息的网络通信。

铺垫至此,也算把一些必要的概念理清了。那么下来,把这些概念集成一下,就可以得到REST的大概定义了。


REST

REST是一种软件架构风格(约束条件和原则的集合,但并不是标准)。
REST通过资源 的角度观察网络,以URI对网络资源进行唯一标识,响应端根据请求端的不同需求,通过无状态通信,对其请求的资源进行表述。

满足REST约束条件和原则的架构或接口,就被称为是RESTful架构或RESTful接口。


REST风格的优点

REST风格的优点基本来自于它的约束条件和原则。

例如,无状态通信可以使请求被分布式服务器的任意一台主机所响应,因此有利于服务器的负载均衡,从而改进性能。

又例如,资源多重表述是一种客户友好的方式,不会因为请求的文件格式发生变化而产生问题。

(其他几点优势还不是很理解...之后再加)


一些问题

  • 在“资源多重表述”特征的使用方式中,在百度上看到它的的另一种使用方式:

    将应用的Web UI纳入到Web API中——毕竟,API的设计通常是由UI可以提供的功能驱动的,而UI也是通过API执行动作的。将这两个任务合二为一带来了令人惊讶的好处,这使得使用者和调用程序都能得到更好的Web接口。--《百度百科》

    对于这种使用方式不是很理解,没有看出来这个方式是如何应用到资源多重表述的

  • 对于“无状态通信”特征中,所谓的应用状态,就是指与特定请求相关的状态信息。那么这种相关的状态信息具体是什么?这里因为还是不太理解,想不到具体的例子。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,302评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,232评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,337评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,977评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,920评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,194评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,638评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,319评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,455评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,379评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,426评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,106评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,696评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,786评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,996评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,467评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,043评论 2 341

推荐阅读更多精彩内容

  • 一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式。”但是在要求详细讲述它所提出的各个约束,以及如...
    时待吾阅读 3,400评论 0 19
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,566评论 18 139
  • REST本身是一个高度抽象化的架构风格,因而总是很难对它有一个比较深入且印象深刻的理解。写这篇文章的目的,是自己对...
    vito1994阅读 2,807评论 0 26
  • API定义规范 本规范设计基于如下使用场景: 请求频率不是非常高:如果产品的使用周期内请求频率非常高,建议使用双通...
    有涯逐无涯阅读 2,517评论 0 6
  • 1. 网络基础TCP/IP HTTP基于TCP/IP协议族,HTTP属于它内部的一个子集。 把互联网相关联的协议集...
    yozosann阅读 3,433评论 0 20