RESTful 是什么?怎么记住它?

RESTful 是什么?怎么记住它?

一、一句话本质

RESTful 就是用 URL 表示资源,用 HTTP 方法表示操作,用状态码表示结果。

它不是一门技术,也不是一个框架,而是一种接口设计风格 。核心就一句话:URL 里只放名词,动词交给 HTTP 方法。

二、用一个比喻记住

把后端系统想象成一个仓库,里面存放着各种货物(资源)。

  • URL 是货物的货架编号 ,比如 /users 是用户货架,/users/1 是 1 号用户。
  • HTTP 方法 是你对货物做的动作 :
    • GET:看一眼货架上有什么(查询)
    • POST:往货架上放一件新货(创建)
    • PUT:把某件货整个换掉(全量更新)
    • PATCH:只改货物的某个标签(部分更新)
    • DELETE:把货从货架上拿走(删除)
  • 状态码 是仓库管理员给你的回执:200 表示办好了,201 表示新货上架了,404 表示货架上没这件货,400 表示你给的信息不对。

关键点 :货架编号(URL)永远不变,变的是你对它做的动作(HTTP 方法)。同一个 /users/1,GET 是查,PUT 是改,DELETE 是删。

三、对比传统写法,一眼看懂

传统写法(动词在 URL 里) RESTful 写法(动词在方法里)
GET /getUser?id=1 GET /users/1
POST /addUser POST /users
POST /updateUser PUT /users/1
GET /deleteUser?id=1 DELETE /users/1
GET /getUserList GET /users

传统写法把动作写进了 URL,RESTful 把动作交给了 HTTP 方法。URL 只负责"找谁",方法负责"干什么"。

四、怎么记住?记四句话

第一句:URL 是名词,不是动词。

看到 /getUser、/addOrder、/deleteItem 这种带动词的 URL,就知道不是 RESTful。RESTful 的 URL 长这样:/users、/orders、/items。

第二句:集合用复数,单个带 ID。

/users 是用户集合,/users/1 是集合里的 1 号用户。不要写 /user,复数更符合"集合"的语义。

第三句:方法定动作,查增改删。

GET 查、POST 增、PUT 改、DELETE 删。记不住就背"查增改删"四个字,对应 GET、POST、PUT、DELETE。

第四句:状态码说话,别总返回 200。

创建成功返回 201,删除成功返回 204,参数错了返回 400,没权限返回 403,找不到返回 404,服务器挂了返回 500。状态码本身就是一种"语法"。

五、一个最小例子,串起来记

java 复制代码
@RestController
@RequestMapping("/users")
public class UserController {

    @GetMapping              // GET /users      查列表
    public List<User> list() { }

    @GetMapping("/{id}")     // GET /users/1    查单个
    public User get(@PathVariable Long id) { }

    @PostMapping             // POST /users     创建
    public User create(@RequestBody User user) { }

    @PutMapping("/{id}")     // PUT /users/1    全量更新
    public User update(@PathVariable Long id, @RequestBody User user) { }

    @DeleteMapping("/{id}")  // DELETE /users/1 删除
    public void delete(@PathVariable Long id) { }
}

记住这个例子:一个 /users,五个方法,覆盖增删改查。 URL 基本不变,方法决定操作。

六、常见误区,帮你避坑

误区一:RESTful 就是返回 JSON。

不对。RESTful 是设计风格,返回 JSON 只是常见做法。返回 XML、HTML 也可以,关键是 URL 和方法的设计。

误区二:URL 里不能有动词。

不是绝对。有些操作无法映射到 CRUD,比如"取消订单""审核通过",可以用 POST /orders/1/cancel 这种子资源动作。但核心的增删改查,尽量用 HTTP 方法表达。

误区三:必须用 PUT,不能用 POST 更新。

理论上 PUT 是全量更新,PATCH 是部分更新,但实际项目中很多团队用 POST 做更新,只要团队约定一致,也能跑。RESTful 是风格,不是法律。

误区四:状态码必须严格。

理想情况下用 201、204、400、404 这些,但很多项目统一返回 200,业务码放在响应体里。这也是常见做法,RESTful 是理想,工程是取舍。

七、一句话总结

RESTful 就是:URL 只放名词,方法表达动作,状态码表达结果。

记不住就背这四句:

URL 是名词,不是动词。

集合用复数,单个带 ID。

方法定动作,查增改删。

状态码说话,别总 200。

把这四句和 /users 那个例子绑在一起,基本就不会忘。

相关推荐
SimonKing1 小时前
Workbuddy太占C盘空间了,写个迁移工具迁走10G的数据
java·后端·程序员
Hvitur1 小时前
Java - Lambda
java·开发语言·python
apcipot_rain6 小时前
C++转Java日记(06)
java·开发语言
金銀銅鐵11 小时前
带您看懂字节码指令(一):一帧里有什么
java·后端·ai编程
nice_lcj52013 小时前
【从零理解 Spring AI · 14】RAG 的四个环节:加载、切分、向量化、检索
java·spring boot·embedding·向量数据库·rag·spring ai·ai应用开发
学长毕设14 小时前
基于springboot科创竞赛信息平台-附源码
java·spring boot·后端
聪明的笨猪猪15 小时前
Java 工程案例:AI 生成 @Async 异步线程池踩坑
java·经验分享·面试·ai编程
学长毕设15 小时前
基于SpringBoot公务员考试交流平台-附源码
java·spring boot·后端
SL_staff18 小时前
私有化低代码:面向强监管行业的可控数字化实践
java·低代码
三翼鸟数字化技术团队18 小时前
高性能存储引擎RocksDB:原理与Java生态实践
java