目录
RESTful是一种设计URL的风格。
注意:RESTful既不是规定,也不是规范!
RESTful的典型表现是:将某些具有“唯一性”的参数值作为URL的一部分。
例如:
https://blog.csdn.net/ls013/article/details/810691
https://blog.csdn.net/weixfd3811/article/details/1156346
以上URL,如果不采用RESTful风格,可能是:
https://blog.csdn.net/article/details?username=ls013&id=810691
https://blog.csdn.net/article/details?username=weixfd3811&id=1156346
可以看到这种请求方式的路径比较复杂,而且语义不够明显,我们并不易于从中获取到相关信息,为了使请求路径变得更加简洁,传递、获取参数值更加方便,通过路径变量@PathVariable的类型,可以约束访问参数。我们就要使用Restful的URL设计风格。
所以,如果需要设计“根据id删除相册”的URL,可以设计为:
http://localhost:8080/albums/9527/delete
从中不难看出我们想要操作的内容,请求的方式,以及id的信息。那么我们在controller中怎么拦截客户端的请求呢?SpringMVC为我们提供了很好的对RESTful风格的支持,还是上面那个例子,要实现对以上URL的拦截,可以在controller的方法中这样写:
@Slf4j
@RestController
@RequestMapping("/albums")
public class AlbumController {
@RequestMapping("/{id}/delete")
public String delete(@PathVariable Long id) {
log.debug("开始处理删除id={}请求", id);
return "处理了/" + id + "/delete的请求";
}
}
在处理请求的方法的参数列表中,可以声明与占位符的名称匹配的参数,并添加@PathVariable
注解,即可接收到URL中的参数值
如果URL中占位符的名称与方法参数的名称不匹配,可以在@PathVariable
注解中配置参数,值为URL中占位符的名称即可,则方法参数的名称就不重要了!例如:
@RequestMapping("/{albumId}/delete")
public String delete(@PathVariable("albumId") Long id) {
log.debug("开始处理删除id={}请求", id);
return "处理了/" + id + "/delete的请求";
}
也就是说我们占位符中虽然传入的是albumId字段的值,但是我们方法参数中也可以定义不同的名称,只需在@PathVariable注解中配置对应参数即可。
所以我们总结一下
RESTFUL特点包括:
1、每一个URI代表1种资源;
2、客户端使用GET、POST、PUT、DELETE4个表示操作方式的动词对服务端资源进行操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源;
3、通过操作资源的表现形式来操作资源;
4、资源的表现形式是XML或者HTML;
5、客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都必须包含理解请求所必需的信息。