什么是RESTful?
RESTful 是一种软件架构风格,主要用于设计网络应用程序,特别是Web服务。它基于 Representational State Transfer(表现层状态转移)的概念,由 Roy Fielding 在其2000年的博士论文中提出,并且强调了如何最优化利用HTTP协议以实现分布式系统中的资源交互。
RESTful的特点
-
资源导向:每个资源都有一个唯一的资源标识符(URI),"资源"表示一种实体,应该是名词,URI 不应该有动词。例如URL,客户端通过这个URI与服务器上的资源进行交互。
-
统一接口:使用标准的HTTP方法来执行不同的操作:
- GET:从服务器获取资源(查询操作)。
- POST:向服务器提交数据以创建新资源或触发某个动作。
- PUT:更新服务器上的现有资源。
- DELETE:从服务器删除指定资源。
- 还包括PATCH用于部分更新资源等其他方法。
-
无状态通信:客户端与服务器的每次交互都是独立的,服务器不保留客户端的任何上下文信息,状态的维护交由客户端负责(通常通过Cookie、令牌等方式管理状态)。
-
资源表述:资源的状态可以通过多种媒体类型(如JSON、XML、HTML等)进行表述,客户端可以根据需要选择合适的表述格式。
SpringMVC对RESTful的支持
SpringMVC 对 RESTful 提供了非常全面的支持,主要有如下几个注解:
- @RestController
这个注解是一个组合注解:相当于@ResponseBody + @Controller
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
/**
* The value may indicate a suggestion for a logical component name,
* to be turned into a Spring bean in case of an autodetected component.
* @return the suggested component name, if any (or empty String otherwise)
* @since 4.0.1
*/
@AliasFor(annotation = Controller.class)
String value() default "";
}
如果接口返回json数据,就使用 @RestController 来标记 Controller接口;如果要返回视图,就使用 @Controller。
请求方法中,提供了常见的请求方法:
- @PostMapping
- @GetMapping
- @PutMapping
- @DeleteMapping
另外还有一个提取请求地址中的参数的注解
- @PathVariable:
@GetMapping("/book/{id}")
public Book getBookById(@PathVariable Integer id) {
Book book = new Book();
book.setId(id);
return book;
}
例如[http://localhost:8080/book/2], 参数 2 将被传递到 id 这个变量上。