RESTful 是一种目前最流行的互联网软件架构设计风格。
1. 核心理念:看山是山(资源导向)
在 RESTful 风格中,网络上的所有东西(用户、订单、商品)都被看作是"资源" (Resource)。
-
传统风格(动词导向 - 像下命令):
以前我们写接口,喜欢把动作写在网址里:
http://localhost:8080/getUser?id=1http://localhost:8080/createUserhttp://localhost:8080/deleteUser?id=1http://localhost:8080/updateUser- 缺点:网址乱七八糟,如果不看文档,不知道 delete 后面是跟 id 还是 name。
-
RESTful 风格(名词导向 - 像文件路径):
REST 认为,网址 (URL) 用来定位资源,不应该包含动作。
- 不管增删改查,网址统一都是:
http://localhost:8080/users - 如果要找特定的人:
http://localhost:8080/users/1
- 不管增删改查,网址统一都是:
那服务器怎么知道我是要"删除"还是"查询"呢?
靠 HTTP 请求方式(动词) 来区分!
2. 四大金刚:HTTP 动词
RESTful 巧妙地利用了 HTTP 协议自带的四个动词,完美对应数据库的 CRUD(增删改查) :
| HTTP 动词 | 对应的操作 | 含义 | 例子 (操作用户 ID=1) |
|---|---|---|---|
| GET | 查 (Read) | 获取资源 | GET /users/1 |
| POST | 增 (Create) | 新建资源 | POST /users (数据在请求体里) |
| PUT | 改 (Update) | 修改资源 | PUT /users (数据在请求体里) |
| DELETE | 删 (Delete) | 删除资源 | DELETE /users/1 |
3. 代码实战:Before vs After
让我们把你之前的 UserController 改造一下,你就明白差距在哪了。
❌ 传统写法(非 RESTful)
Java
less
@RestController
public class UserController {
// 动作全写在 URL 里
@RequestMapping("/queryUserById")
public User get(Integer id) { ... }
@RequestMapping("/saveUser")
public void save(User user) { ... }
@RequestMapping("/deleteUser")
public void delete(Integer id) { ... }
}
✅ RESTful 写法(推荐)
在 Spring Boot 中,我们有专门的注解来对应那四个动词。注意看 URL 有多干净:
Java
less
@RestController
@RequestMapping("/users") // 1. 统一资源的路径,全是复数
public class UserController {
// 获取所有用户:GET /users
@GetMapping
public List<User> list() { ... }
// 获取单个用户:GET /users/1
// @PathVariable 用于获取路径上的 {id}
@GetMapping("/{id}")
public User getById(@PathVariable Integer id) { ... }
// 新增用户:POST /users
@PostMapping
public void save(@RequestBody User user) { ... }
// 修改用户:PUT /users
@PutMapping
public void update(@RequestBody User user) { ... }
// 删除用户:DELETE /users/1
@DeleteMapping("/{id}")
public void delete(@PathVariable Integer id) { ... }
}
4. 两个关键新注解
在 RESTful 开发中,你会频繁用到这两个注解:
-
@PathVariable:- 场景:用于路径参数。
- 例子 :
/users/1中的1。 - 代码 :
@DeleteMapping("/{id}") public void delete(@PathVariable Integer id)
-
@RequestBody:- 场景 :用于接收前端发来的 JSON 数据(通常用于 POST 和 PUT)。
- 解释 :它会自动把前端发来的 JSON 字符串(比如
{"name":"大桥", "age":20})转换成 Java 的User对象。
5. 总结:为什么要用 RESTful?
- 看网址就知道在干嘛 :看到
DELETE /users/1,傻子都知道这是要删除 1 号用户。 - 前端后端沟通成本低:这已经成了行业标准。前端开发人员看到你的接口文档是 RESTful 风格的,他都不用问你,直接就会调。
- 支持多端:这种风格返回的通常是 JSON 数据,无论是网页、安卓 App 还是 iOS App,都可以通用一套接口。