RESTful风格解析

RESTful 是一种目前最流行的互联网软件架构设计风格


1. 核心理念:看山是山(资源导向)

在 RESTful 风格中,网络上的所有东西(用户、订单、商品)都被看作是"资源" (Resource)。

  • 传统风格(动词导向 - 像下命令):

    以前我们写接口,喜欢把动作写在网址里:

    • http://localhost:8080/getUser?id=1
    • http://localhost:8080/createUser
    • http://localhost:8080/deleteUser?id=1
    • http://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 开发中,你会频繁用到这两个注解:

  1. @PathVariable

    • 场景:用于路径参数。
    • 例子/users/1 中的 1
    • 代码@DeleteMapping("/{id}") public void delete(@PathVariable Integer id)
  2. @RequestBody

    • 场景 :用于接收前端发来的 JSON 数据(通常用于 POST 和 PUT)。
    • 解释 :它会自动把前端发来的 JSON 字符串(比如 {"name":"大桥", "age":20})转换成 Java 的 User 对象。

5. 总结:为什么要用 RESTful?

  1. 看网址就知道在干嘛 :看到 DELETE /users/1,傻子都知道这是要删除 1 号用户。
  2. 前端后端沟通成本低:这已经成了行业标准。前端开发人员看到你的接口文档是 RESTful 风格的,他都不用问你,直接就会调。
  3. 支持多端:这种风格返回的通常是 JSON 数据,无论是网页、安卓 App 还是 iOS App,都可以通用一套接口。

相关推荐
qfljg15 分钟前
OpenRewrite 实战指南
java
Sylvia33.20 分钟前
LOL实时数据接入深度解析:从WebSocket到完整数据模型
java·网络·python·websocket·网络协议
2601_962071576 小时前
【Java报错已解决】org.springframework.beans.factory.BeanCreationException
java·开发语言
zww89491116 小时前
酒馆预约系统开发实战:从需求分析到上线全流程指南
java·eclipse
zww89491119 小时前
匿名树洞系统开发实战:从需求分析到部署指南
java·eclipse
黑马程序员毕设10 小时前
基于Java的医院药品管理系统的优化设计与实现
java·开发语言·spring boot·小程序·架构·课程设计·毕设
木井巳10 小时前
【BFS/DFS 解决 FloodFill 算法】太平洋大西洋水流问题
java·算法·leetcode·深度优先·广度优先·宽度优先·推荐算法
白山编程大哥10 小时前
Java 集合算法:从排序、查找到底层原理的实战指南
java·python·算法
devpotato11 小时前
缓存与数据库更新顺序不一致问题
java·数据库·redis
xcl092511 小时前
酒馆预约系统开发实战:从需求分析到上线全流程指南
java·spring boot·需求分析