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,都可以通用一套接口。

相关推荐
用户298698530143 小时前
Java 实现 Word 文档加密与权限解除
java·后端
Yeats_Liao4 小时前
14:Servlet中的页面跳转-Java Web
java·后端·架构
未秃头的程序猿4 小时前
告别"if-else地狱"!Java 21模式匹配,代码优雅了10倍
java·后端·面试
鹤望兰6754 小时前
字节跳动国际支付-后端开发-三面面经
java
Flittly4 小时前
【AgentScope Java新手村系列】(14)人机交互
java·spring boot·spring
RainCity4 小时前
Java Swing 自定义组件库分享(十二)
java·笔记·后端
吃饱了得干活20 小时前
Spring Cloud Gateway 微服务网关:路由、断言、过滤器
java·spring cloud
lwx572801 天前
探秘InnoDB:搞懂它的内存、线程、磁盘与日志刷盘策略
java·后端
Flynt1 天前
从Spring Boot 4.0升到4.1,我在Maven和gRPC上栽了跟头
java·spring boot·后端
plainGeekDev1 天前
Activity 间传值 → Navigation 参数
android·java·kotlin