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 那个例子绑在一起,基本就不会忘。

相关推荐
秋饼1 小时前
Spring AI + MCP 工具调用可靠性实战:参数校验、权限防线与人工确认生产级落地
java·ai·技术分享·后端开发
随性而行3601 小时前
企业微信 Webhook 接收不到消息?网络连通性、URL 签名验签与 API 返回错误码排查指南
java·网络·人工智能·后端·微信·企业微信
薛之谦_1 小时前
JD Hotkey 项目实战:京东开源的热点探测与秒杀系统
java·安全
yuzhiboyouye1 小时前
@EnumValue和@JsonValue
java
相隔一个图书馆的距离1 小时前
单测(三)Spring Boot 3.5.6 && @MockitoSpyBean / AOP / 循环依赖:静默吞错与运行期 NPE
java·spring boot·后端
软件技术NINI1 小时前
基于JavaWeb 汽车租聘
java·vue.js·spring boot·后端·python·毕业设计·毕设
yz_aiks1 小时前
RestTemplate 废弃后迁移 RestClient 实战:Spring Boot 4.2 升级指南
java·spring boot·后端·微服务·restclient
wuminyu1 小时前
JVM规范学习总结-JVM规范基本概念
java·linux·c语言·jvm·c++
时间静止不是简史5 小时前
生产事故排查:Redis 宕机导致补偿队列消费线程死亡,通话录音未上送业务平台
java·redis