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

相关推荐
Hpc_Fun1 分钟前
GPU 工作站品牌怎么比?五把可核验尺子、加权评分脚本与场景重排
java·信创·gpu工作站·品牌对比·加权评分
const_qiu2 分钟前
第四章 03:4.3 Tools —— 让 Agent 会用工具
java·人工智能
Rain的Java大神之路8 分钟前
百万并发直播弹幕系统设计全解:看懂了扇出,你就看懂了高并发的八成
java·后端·面试
\光辉岁月/24 分钟前
2.异常类
java·开发语言·异常类
十年Java程序媛33 分钟前
JVM 基础与 GC 垃圾回收详解|可达性分析、分代模型、垃圾收集器、STW
java·开发语言·jvm·spring boot·后端·面试
2301_32241428041 小时前
基于SSM框架的在线考试管理系统的设计与实现14750-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·redis·mysql·tomcat·maven·mybatis·ssm
clz13145211 小时前
RuoYi-Cloud 新建微服务并实现服务间调用(OpenFeign 实战)
java·ruoyi
const_qiu1 小时前
第四章 06:4.6 统一入口 —— analyze() 能力收束
java·人工智能
她的男孩1 小时前
JAR 全对仍 checksum mismatch:Forge Admin 把 Flyway 从 filesystem 改成 classpath
java·数据库·spring boot
鬼手点金1 小时前
如何选择模型
java·前端·人工智能·git·深度学习