RESTful简述

148 阅读2分钟

什么是RESTful?

RESTful 是一种软件架构风格,主要用于设计网络应用程序,特别是Web服务。它基于 Representational State Transfer(表现层状态转移)的概念,由 Roy Fielding 在其2000年的博士论文中提出,并且强调了如何最优化利用HTTP协议以实现分布式系统中的资源交互。

RESTful的特点

  1. 资源导向:每个资源都有一个唯一的资源标识符(URI),"资源"表示一种实体,应该是名词,URI 不应该有动词。例如URL,客户端通过这个URI与服务器上的资源进行交互。

  2. 统一接口:使用标准的HTTP方法来执行不同的操作:

    • GET:从服务器获取资源(查询操作)。
    • POST:向服务器提交数据以创建新资源或触发某个动作。
    • PUT:更新服务器上的现有资源。
    • DELETE:从服务器删除指定资源。
    • 还包括PATCH用于部分更新资源等其他方法。
  3. 无状态通信:客户端与服务器的每次交互都是独立的,服务器不保留客户端的任何上下文信息,状态的维护交由客户端负责(通常通过Cookie、令牌等方式管理状态)。

  4. 资源表述:资源的状态可以通过多种媒体类型(如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 这个变量上。