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

相关推荐
EatFan6 小时前
Spring Boot 4 落地观察:从 yudao-cloud、matecloud、JPower 看国产脚手架的升级路线与迁移清单
java·spring boot·后端·spring cloud·微服务·后端开发·jdk 21
Maiko Star7 小时前
* LangChain 提示词模板详解:ChatPromptTemplate 的使用与高级特性
java·人工智能·langchain
现任明教教主~9 小时前
Thinkphp站群蜘蛛池SaaS系统YanyvSEO含多用户/积分/六大引擎计费/易支付对接
java·开发语言·spring
一条破秋裤10 小时前
Linux 线程创建:pthread_create 与基本回收
java·linux·运维
布吉岛的石头10 小时前
Java 程序员第 49 阶段5:BERT 预训练目标 MLM+NSP 的工程含义
java·人工智能·深度学习·bert·transformer
摇滚侠11 小时前
《On Java 中文版 基础卷》阅读笔记 对象无处不在 03
java·笔记·python
二十雨辰11 小时前
[学成在线]-01项目背景
java
弈栈录12 小时前
Java AI 应用的异步化与高并发设计
java·后端·架构
落魄实习生12 小时前
Agent Scope Java 2.x 系列【2】 ReActAgent
java·开发语言
艸肅12 小时前
Ubuntu 安装 JDK (含手动安装)
java·ubuntu·jdk