1 什么是REST?
1.1 REST的概念
REST (Representational State Transfer):表述性状态转移,即资源在网络中以某种表现形式进行状态转移。2000年,由Roy Thomas Fielding在他的博士论文中提出。REST定义了一种互联网软件的架构原则。因此,REST也可以说是一种架构风格。
1.2 REST的原则
- 网络上的所有事物都可以抽象为资源
- 每个资源都有唯一的资源标识符
- 同一个资源具有多种表现形式(xml, json等)
- 对资源的各种操作不会改变其资源标识符
- 对资源的所有操作都是无状态的
2 什么是RESTful?
2.1 RESTful的概念
RESTful:遵守了REST原则的web服务。REST式的web服务是一种ROA(The Resource-Oriented Architecture,面向资源的架构),资源(Resource)是核心。
互联网中,客户端与服务端的交互,传递的只是资源的表述。上网的过程就是调用资源的URI,来获取资源不同表现形式的过程。这种互动只能使用无状态的HTTP协议。因此,服务端必须保存所有的状态。客户端可以使用HTTP的操作,如GET/POST/PUT/DELETE,使服务器上的资源发生状态转化(State Transfer),即表述性状态转移。
URI(Uniform Resource Identifier):统一资源标识符,包含URL(Uniform Resource Locator,统一资源定位符)和URN(Universal Resource Name,统一资源名称)。
2.2 RESTful的运用
以SpringBoot为例,它全面支持开发RESTful程序,通过不同的注解支持不同的请求:
- @GetMapping:处理GET请求,查询资源;
- @PostMapping:处理POST请求,创建资源;
- @PutMapping:处理PUT请求,替换资源;
- @PatchMapping:处理PATCH请求,部分修改资源;
- @DeleteMapping:处理DELETE请求,删除资源。
在Controller中,映射参数的注解:
- @PathVariable:用于接收URL路径上的参数,如URL/1;
- @ModelAttribute:用于接收URL?后的参数,如URL?id=1&name=ace,然后直接转换为实体对象。
示例1:
方法 | URL | 功能描述 |
---|---|---|
GET | /users | 获取用户列表 |
GET | /users/1 | 获取id为1的用户 |
POST | /users | 创建一个用户 |
PUT | /users/1 | 替换id为1的用户 |
PATCH | /users/1 | 修改id为1的用户 |
DELETE | /users/1 | 删除id为1的用户 |
示例2:
方法 | URL | 功能描述 |
---|---|---|
GET | /users/1/files | 获取用户1的文件列表 |
GET | /users/1/files/3 | 获取用户1的文件3 |
POST | /users/1/files | 在用户1下创建一个文件 |
PUT | /users/1/files/3 | 替换用户1的文件3 |
PATCH | /users/1/files/3 | 修改用户1的文件3 |
DELETE | /users/1/files/3 | 删除用户1的文件3 |