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 | # 获取用户信息,1是用户编号 |
对于参数数量超过 5 个的,可以考虑使用传递 JSON 的方式来传递参数。
关于 REST 风格的一些误区:
- 在 URI 中不应该存在动词;
- 在 URI 中不能加入版本号,如果存在版本号,可以设置 HTTP 请求头
使用 Spring MVC 开发 REST 风格端点
使用@RequestMapping、@GetMapping 等注解,可以把 URI 定位到对应的控制器方法上;使用注解@PathVariable 可以获取 URI 地址的参数;使用注解@RequestBody 可以将请求体为 JSON 数据集的数据转化为复杂的 Java 对象。