第一节 RESTFul概述
1、REST 引入
2、REST 规范的内涵
①资源
②表现层(Representation)
③状态转移
3、REST 规范具体要求
①四种请求方式对应四种常见操作
②URI 地址风格
4、REST 风格的好处
①含蓄,安全
②风格统一
③无状态
④严谨,规范
⑤简洁,优雅
⑥丰富的语义
5、Rest架构的主要原则
6、幂等性和安全性

第一节 RESTFul概述

1、REST 引入

RESTful架构,是目前非常流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,正得到越来越多网站的采用。
REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的。
第一节 RESTFul概述 - 图1

Fielding是一个非常重要的人,他是HTTP协议(1.0版和1.1版)的主要设计者、Apache服务器软件的作者之一、Apache基金会的第一任主席。所以,他的这篇论文一经发表,就引起了关注,并且立即对互联网开发产生了深远的影响。
REST,即Representational State Transfer的缩写,可以翻译我为“表示性的状态转移”,“表现层资源的状态转移”
如果一个架构符合REST原则,就称它为RESTful架构。

2、REST 规范的内涵

要理解RESTful架构,最好的方法就是去理解Representational State Transfer这个词组到底是什么意思,它的每一个词代表了什么涵义

①资源

REST的名称”表现层状态转化”中,省略了主语。”表现层”其实指的是”资源”(Resources)的”表现层”。
所谓”资源”,就是网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实在。你可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的URI。要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或独一无二的识别符。
所谓”上网”,就是与互联网上一系列的”资源”互动,调用它的URI。

②表现层(Representation)

资源是一种信息实体,它可以有多种外在表现形式。我们把”资源”具体呈现出来的形式,叫做它的”表现层”(Representation)。
比如,文本可以用txt格式表现,也可以用HTML格式、XML格式、JSON格式表现,甚至可以采用二进制格式;图片可以用JPG格式表现,也可以用PNG格式表现。

③状态转移

互联网通信协议HTTP协议,是一个无状态协议。这意味着,所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生”状态转化”(State Transfer)。而这种转化是建立在表现层之上的,所以就是”表现层状态转化”。
客户端用到的手段,只能是HTTP协议。具体来说,就是HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源,PUT用来更新资源,DELETE用来删除资源。

3、REST 规范具体要求

①四种请求方式对应四种常见操作

REST 风格主张在项目设计、开发过程中,具体的操作符合 HTTP 协议定义的请求方式的语义。

操作 请求方式
查询操作 GET
保存操作 POST
删除操作 DELETE
更新操作 PUT

②URI 地址风格

REST 风格提倡 URI地址使用统一的风格设计,从前到后各个单词使用斜杠分开,不使用问号键值对方式携带请求参数,而是将要发送给服务器的数据作为 URI地址的一部分,以保证整体风格的一致性。
还有一点是不要使用请求扩展名。

传统 URL 地址 REST 风格地址
/deleteEmp?id=5 /emp/5
/findEmp?name=zh&salary=300 /emp/zh/300

传统URI地址更象是代表一种功能,代表一个操作,要“干什么”。而REST风格地址却是代表一种资源,表明“是什么”。

4、REST 风格的好处

①含蓄,安全

使用问号键值对的方式给服务器传递数据太明显,容易被人利用来对系统进行破坏。使用 REST 风格携带数据不再需要明显的暴露数据的名称。

②风格统一

URI 地址整体格式统一,从前到后始终都使用斜杠划分各个内容部分,用简单一致的格式表达语义。

③无状态

在调用一个接口(访问、操作资源)的时候,可以不用考虑上下文,不用考虑当前状态,极大的降低了系统设计的复杂度。

④严谨,规范

严格按照 HTTP1.1 协议中定义的请求方式本身的语义进行操作。

⑤简洁,优雅

过去做增删改查操作需要设计4个不同的URI,现在一个就够了。

操作 传统风格 REST 风格
保存 /CRUD/saveEmp URL 地址:/CRUD/emp
请求方式:POST
删除 /CRUD/removeEmp?empId=2 URL 地址:/CRUD/emp/2
请求方式:DELETE
更新 /CRUD/updateEmp URL 地址:/CRUD/emp
请求方式:PUT
查询(表单回显) /CRUD/findEmpById?empId=2 URL 地址:/CRUD/emp/2
请求方式:GET

目前主要使用HTTP协议(就是REST思想提出者Roy Thomas Fielding设计的)来实现REST思想,网络上有人从实践的角度,一句话总结REST:URI定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作。

⑥丰富的语义

通过 URI 地址就可以知道资源之间的关系。它能够把一句话中的很多单词用斜杠连起来,反过来说就是可以在 URI 地址中用一句话来充分表达语义。
http://localhost:8080/shop
http://localhost:8080/shop/product
http://localhost:8080/shop/product/cellPhone
http://localhost:8080/shop/product/cellPhone/iPhone

5、Rest架构的主要原则

  • 网络上的所有事物都被抽象为资源
  • 每个资源都有一个唯一的资源标识符
  • 同一个资源具有多种表现形式(xml,json等)
  • 对资源的各种操作不会改变资源标识符
  • 所有的操作都是无状态的

6、幂等性和安全性

幂等性: 一个方法多次调用返回的效果(形式)一致,客户端可以重复调用并且期望同样的结果。 一次调用和多次调用产生的效果是一致的,都是对一个变量进行赋值。
安全性:仅指该方法的多次调用不会产生副作用,不涉及传统意义上的“安全”,这里的副作用是指资源状态。 即,安全的方法不会修改资源状态,尽管多次调用的返回值可能不一样(被其他非安全方法修改过)。

HTTP操作 资源操作 幂等性 安全性
GET SELECT
POST INSERT/SAVE
PUT UPDATE/EDIT
DELETE DELETE/REMOVE

回目录 下一节