理解 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 风格(推荐):
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 层代码如下:
@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 方法语义) | 像是“菜单怎么写、每道菜怎么点”的餐厅规范 |
到此这篇关于深入理解 springboot中crud与restful的文章就介绍到这了,更多相关springboot crud与restful内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论