清茗小记

生活随笔,心灵漫游

0%

Spring 学习——REST

REST(资源表现层状态转换)是一种以资源为中心的架构风格,用 URI 唯一标识资源,通过 HTTP 动作(GET/POST/PUT/DELETE 等)实现资源的创建、查询、修改和删除。它以 JSON/XML 等格式表现资源状态,遵循无状态通信原则,强调 URI 设计的简洁性与语义化。在 Spring 中可通过注解快速构建符合 REST 风格的 API 端点,避免在 URI 中混入动词或版本号,让接口清晰易用。

REST 按其英文名称 Representational State Transfer,可翻译为“(资源)表现层状态转换”。

  • 资源:可以是系统权限用户、角色和菜单等,总之资源就是一个具体存在的对象。可以用一个统一资源定位符(URI)指向资源,要访问这个资源,访问它的 URI 即可。在 REST 中,URI 也可以成为端点。
  • 表现层:用于表现资源。例如一个用户可以使用 JSON 数据集、XML 或者其他的形式表现出来。
  • 状态转换:一个资源可以经历创建(create)、访问(visit)、修改(update)和删除(delete)的过程。

REST 风格架构的特点:

  • 服务器存在一系列的资源,每个资源通过唯一的 URI 进行标识;
  • 客户端和服务器之间可以相互传递资源,而资源会以某种表现层得以展示;
  • 客户端通过 HTTP 定义的动作对资源进行操作,以实现资源的状态转换。

HTTP 是没有状态的协议,但是存在很多的动作来对应这些状态的变化:

  • POST(CREATE):提交服务器资源信息,用来创建新的资源。
  • GET(VISIT):访问服务器资源(一个或者多个资源)。
  • PUT(UPDATE):修改服务器已经存在的资源,使用 PUT 时需要将资源的所有属性一并提交。
  • PATCH(UPDATE):修改服务器已经存在的资源,使用 PATCH 时只需要将部分资源属性提交。
  • DELETE(DELETE):从服务器将资源删除。

举例:

1
2
3
4
5
6
7
8
9
10
# 获取用户信息,1是用户编号
GET /user/1
# 根据用户名和备注查询多个用户信息
GET /users/{userName}/{note}
# 创建用户
POST /user/{userName}/{sex}/{note}
# 修改用户全部属性
PUT /user/{id}/{userName}/{sex}/{note}
# 修改用户名(部分属性)
PATCH /user/{id}/{userName}

对于参数数量超过 5 个的,可以考虑使用传递 JSON 的方式来传递参数。

关于 REST 风格的一些误区:

  • 在 URI 中不应该存在动词;
  • 在 URI 中不能加入版本号,如果存在版本号,可以设置 HTTP 请求头

使用 Spring MVC 开发 REST 风格端点

使用@RequestMapping、@GetMapping 等注解,可以把 URI 定位到对应的控制器方法上;使用注解@PathVariable 可以获取 URI 地址的参数;使用注解@RequestBody 可以将请求体为 JSON 数据集的数据转化为复杂的 Java 对象。