第一节 RESTFul概述
1、REST 引入
2、REST 规范的内涵
①资源
②表现层(Representation)
③状态转移
3、REST 规范具体要求
①四种请求方式对应四种常见操作
②URI 地址风格
4、REST 风格的好处
①含蓄,安全
②风格统一
③无状态
④严谨,规范
⑤简洁,优雅
⑥丰富的语义
5、Rest架构的主要原则
6、幂等性和安全性
第一节 RESTFul概述
1、REST 引入
RESTful架构,是目前非常流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,正得到越来越多网站的采用。
REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的。
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 | 是 | 否 |