提升自己,想进入大型互联网公司。欢迎关注我的微信公众号 ,搜索微信公众号:"一起写程序" ,会分享系列文章,希望大家能一起学习。
RESTful?
Resource Representational state transfer. 表现层状态转换,指的是资源的表现层状态转换。
三部分:资源,表现,状态
1,resource资源:是一个实体,比如,视频,文本,图片等。
1.1资源的表现形式:uri(统一资源定位符)是资源的定位,不是资源的表现形式。
2,representational:资源的呈现形式,根据http协议的contentType和accept呈现资源。
例如:文本是一个资源:它的表现有 txt,xml,html,json等。图片也是资源:它的表现有 jpg,png等。
2.1资源的表现层的表现形式:通过http协议的contentType和accept进行指定。
3,State transfer:资源状态转化,通过post,get,put,delete等改变状态,客户端访问服务器端数据肯定是要发生数据的变化,http协议是无状态协议,所以需要通过某种手段,使得数据发生状态转换,是通过get,post,pust,delete。等手段改变数据状态。
3.1,资源的状态转换表现形式:客户端通过http动词,对服务器端资源进行操作,进行“资源状态转化”
例子1:通过不同的contentType获得资源的呈现形式。
Book是一个资源,它的表现形式不再url上体现,url只是资源的定位。资源的表现通过contentType表现。
http://localhost:8088/test/book
/**
* 根据contentType获得资源的不同呈现形式。就是表现层
*/
@RequestMapping("book")
@ResponseBody
public String book(HttpServletRequest httpServletRequest){
String contentType = httpServletRequest.getContentType();
if(contentType == null){
return "book.defualt";
}else if(contentType == "txt"){
return "book.txt";
}else if(contentType == "html") {
return "book.html";
}
return "book.defualt";
}
资源状态转化:
例子2:资源的状态转换:
http://localhost:8088/test/book/123
/**
* 1,将变量写在url当中。这样就可以通过不同的id方法我不同资源。
*,2,一个资源的url是固定的,根据method的不同,更改资源的状态。
*/
@RequestMapping(value="book/{subjectId}",method = RequestMethod.POST)
@ResponseBody
public String subjectPost(@PathVariable("subjectId")String subjectId){
return "this is get subjectid:"+subjectId;
}
@RequestMapping(value="book/{subjectId}",method = RequestMethod.GET)
@ResponseBody
public String subjectGet(@PathVariable("subjectId")String subjectId){
return "this is get subjectid:"+subjectId;
}
@RequestMapping(value="book/{subjectId}",method = RequestMethod.PUT)
@ResponseBody
public String subjectPut(@PathVariable("subjectId")String subjectId){
return "this is get subjectid:"+subjectId;
}
@RequestMapping(value="book/{subjectId}",method = RequestMethod.DELETE)
@ResponseBody
public String subjectDelete(@PathVariable("subjectId")String subjectId){
return "this is get subjectid:"+subjectId;
}
注意:restful设计的时候,uri不要用动词,因为资源都是静态的。