理解 CRUD 和 RESTful 是掌握 Spring Boot 开发的关键。可以把它们想象成“做什么”和“怎么做”的关系。
下面我用通俗的方式帮你理清这两个概念,并展示它们在 Spring Boot 中是如何结合的。
一、什么是 CRUD?
CRUD 是计算机编程中最基本的四个操作,无论什么软件系统,本质上都是在处理数据的这四个动作:
| 字母 | 操作 | 含义 | HTTP方法 |
|---|---|---|---|
| C | Create | 创建/新增数据 | POST |
| R | Read | 读取/查询数据 | GET |
| U | Update | 更新/修改数据 | PUT / PATCH |
| D | Delete | 删除数据 | DELETE |
简单说,CRUD 定义了“我们要对数据做什么”。
二、什么是 RESTful?
RESTful 是一种API 的设计风格(规范),它告诉我们应该如何组织 URL 的结构、如何利用 HTTP 方法,让接口变得清晰、统一、易于理解。
RESTful 的核心思想:
-
把一切数据都看作“资源”(比如用户、订单、商品)
-
每个资源对应一个唯一的 URL 地址
-
通过 HTTP 方法(GET/POST/PUT/DELETE)来区分对该资源的操作
非 RESTful 风格(不推荐):
text
POST /user/create // 创建用户 GET /user/delete?id=1 // 删除用户(用 GET 不安全) POST /user/update // 更新用户 GET /user/query?id=1 // 查询用户
这种方式 URL 很随意,动作写在路径里,方法乱用。
RESTful 风格(推荐):
text
POST /users // 创建用户 GET /users // 查询所有用户 GET /users/1 // 查询 id=1 的用户 PUT /users/1 // 更新 id=1 的用户 DELETE /users/1 // 删除 id=1 的用户
你看,URL 只表示资源(名词),HTTP 方法表示操作(动词),结构清晰,一看就懂。
三、CRUD 和 RESTful 的关系
它们经常一起出现,但层次不同:
-
CRUD 是业务层面的四个基础操作,与具体技术无关
-
RESTful 是接口设计层面的规范,告诉你怎么用 HTTP 来暴露 CRUD 操作
一句话总结:用 RESTful 风格设计 API 来对外提供 CRUD 功能。
四、在 Spring Boot 中实现 RESTful CRUD
在 Spring Boot 中,我们通过 @RestController 和一系列注解来快速实现。
假设我们有一个“用户”资源,对应的实体类 User 和 Service 层已准备好,Controller 层代码如下:
java
@RestController // 标记为控制器,返回 JSON 数据
@RequestMapping("/users") // 资源路径的根路径
public class UserController {
@Autowired
private UserService userService;
// C - Create:创建用户
@PostMapping
public User create(@RequestBody User user) {
return userService.save(user);
}
// R - Read:查询所有用户
@GetMapping
public List<User> list() {
return userService.findAll();
}
// R - Read:查询单个用户
@GetMapping("/{id}")
public User getById(@PathVariable Long id) {
return userService.findById(id);
}
// U - Update:更新用户
@PutMapping("/{id}")
public User update(@PathVariable Long id, @RequestBody User user) {
return userService.update(id, user);
}
// D - Delete:删除用户
@DeleteMapping("/{id}")
public void delete(@PathVariable Long id) {
userService.deleteById(id);
}
}
注解说明:
-
@PostMapping=@RequestMapping(method = RequestMethod.POST) -
@GetMapping=@RequestMapping(method = RequestMethod.GET) -
@PutMapping=@RequestMapping(method = RequestMethod.PUT) -
@DeleteMapping=@RequestMapping(method = RequestMethod.DELETE)
@PathVariable 用来接收 URL 路径中的 {id} 参数。
五、常见问题与补充
1. PUT 和 POST 有什么区别?
-
POST 用于新增,通常不指定具体 ID,由服务端生成
-
PUT 用于更新,通常 URL 中会带具体 ID,且要求资源存在(有些设计也允许 PUT 做新增)
2. 如果只想更新部分字段怎么办?
可以用 PATCH 方法,对应 @PatchMapping,但实际项目中很多人仍用 PUT 传整个对象。
3. 返回值怎么设计?
RESTful 通常建议返回:
-
创建成功 → 返回
201 Created状态码,并在响应头Location中带上新资源的 URL -
删除成功 → 返回
204 No Content -
查询成功 → 返回
200 OK和数据
Spring Boot 中可以配合 ResponseEntity 来精细控制状态码。
六、总结
| 概念 | 核心点 | 比喻 |
|---|---|---|
| CRUD | 数据的四个基本操作(增删改查) | 像是“洗菜、切菜、炒菜、装盘”这些厨房基本功 |
| RESTful | API 的设计规范(资源定位 + HTTP 方法语义) | 像是“菜单怎么写、每道菜怎么点”的餐厅规范 |

1917

被折叠的 条评论
为什么被折叠?



