一 简介
REST(英文:Representational State Transfer,简称REST)描述了一个架构样式的网络系统,比如 web 应用程序。它首次出现在 2000 年 Roy Fielding 的博士论文中,Roy Fielding是 HTTP 规范的主要编写者之一。在目前主流的三种Web服务交互方案中,REST相比于SOAP(Simple Object Access protocol,简单对象访问协议)以及XML-RPC更加简单明了,无论是对URL的处理还是对Payload的编码,REST都倾向于用更加简单轻量的方法设计和实现。值得注意的是REST并没有一个明确的标准,而更像是一种设计风格。
Restful就是一个资源定位、资源操作的风格,不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制
资源:互联网所有的事物都可以被抽象为资源
资源操作:分为POST
、DELETE
、PUT
、GET
四种方法,使用不同方法对资源进行操作(增删改查)
二 传统风格与RESTful风格对比
2.1 传统方式操作资源
通过不同的参数来实现不同的效果
方法单一
http://127.0.0.1/item/queryItem.action?id=1(查询,GET)
http://127.0.0.1/item/saveItem.action(新增,POST)
http://127.0.0.1/item/updateItem.action(更新,POST)
http://127.0.0.1/item/deleteItem.action?id=1(删除,GET或POST)
2.2 Restful方式操作资源
可以通过不同的请求方式来实现不同的效果
请求地址一样,但功能可以不同
http://127.0.0.1/item/1(查询,GET)
http://127.0.0.1/item(新增,POST)
http://127.0.0.1/item(更新,PUT)
http://127.0.0.1/item/1(删除,DELETE)
三 RESTful 的特性
-
资源(Resources):
网络上的一个实体,或者说是网络上的一个具体信息。 它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的存在。可以用一个 URI(统一 资源定位符)指向它,每种资源对应一个特定的 URI 。要 获取这个资源,访问它的 URI 就可以,因此 URI 即为每一个资源的独一无二的识别符。
-
表现层(Representation):
把资源具体呈现出来的形式,叫做它的表现层 (Representation)。 比如,文本可以用 txt 格式表现,也可以用 HTML 格式、XML 格式、JSON 格式表现,甚至可以采用二进制格式。
-
状态转化(State Transfer):
每发出一个请求,就代表了客户端和服务器的一次交互过程。 HTTP 协议,是一个无状态协议,即所有的状态都保存在服务器端。因此,如果客户端想要操作服务器, 必须通过某种手段,让服务器端发生“状态转化”(State Transfer)。而这种转化是建立在表现层之上的,所以 就是 “表现层状态转化”。具体说,就是 HTTP 协议里面,四个表示操作方式的动词:
GET
、POST
、PUT
、DELETE
。它们分别对应四种基本操作:GET
用来获取资源,从服务器查询,可以在服务器通过请求的参数区分查询的方式。POST
用来新建资源,在服务器新建一个资源,调用insert操作。PUT
用来更新资源,在服务器更新资源,调用update操作。DELETE
用来 删除资源,从服务器删除资源,调用delete语句。
四 RESTful的使用
在Restful风格中,用户请求的url使用同一个url而用请求方式:get,post,delete,put…等方式对请求的处理方法进行区分,这样可以在前后台分离式的开发中使得前端开发人员不会对请求的资源地址产生混淆和大量的检查方法名的麻烦,形成一个统一的接口。
举例:
如果当前url是
http://localhost:8080/rng
那么用户只要请求这样同一个URL就可以实现不同的增删改查操作,例如
http://localhost:8080/rng?_method=get&id=1001
这样就可以通过get请求获取到数据库 user 表里面 id=1001 的用户信息
http://localhost:8080/rng?_method=post&id=1001&name=zhangsan
这样可以向数据库 user 表里面插入一条记录
http://localhost:8080/rngr?_method=put&id=1001&name=lisi
这样可以将 user表里面 id=1001 的用户名改为lisi
http://localhost:8080/rngr?_method=delete&id=1001
这样用于将数据库 user 表里面的id=1001 的信息删除这样定义的规范我们就可以称之为restful风格的API接口,我们可以通过同一个url来实现各种操作
注意事项:
-
URI(统一资源标识符)中不能包含动词,只能包含名词因为“资源”是一种”实体“,所以URI中只能包含名词。
URI = Universal Resource Identifier 统一资源标志符,用来标识抽象或物理资源的一个紧凑字符串。 URL = Universal Resource Locator 统一资源定位符,一种定位资源的主要访问机制的字符串。 URN = Universal Resource Name 统一资源名称,通过特定命名空间中的唯一名称或ID来标识资源。
-
在URI中不能包含版本号(不同的版本,可以理解成同一种资源的不同表现形式),所以应该采用同一个URI。版本号可以在HTTP请求头信息的Accept字段中进行区分。