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

相关推荐
皮皮林5516 小时前
Java性能调优黑科技!1行代码实现毫秒级耗时追踪,效率飙升300%!
java
冰_河6 小时前
QPS从300到3100:我靠一行代码让接口性能暴涨10倍,系统性能原地起飞!!
java·后端·性能优化
桦说编程9 小时前
从 ForkJoinPool 的 Compensate 看并发框架的线程补偿思想
java·后端·源码阅读
躺平大鹅11 小时前
Java面向对象入门(类与对象,新手秒懂)
java
初次攀爬者12 小时前
RocketMQ在Spring Boot上的基础使用
java·spring boot·rocketmq
花花无缺12 小时前
搞懂@Autowired 与@Resuorce
java·spring boot·后端
Derek_Smart13 小时前
从一次 OOM 事故说起:打造生产级的 JVM 健康检查组件
java·jvm·spring boot
NE_STOP14 小时前
MyBatis-mybatis入门与增删改查
java
孟陬17 小时前
国外技术周刊 #1:Paul Graham 重新分享最受欢迎的文章《创作者的品味》、本周被划线最多 YouTube《如何在 19 分钟内学会 AI》、为何我不
java·前端·后端