一、介绍
传统api:
http://ip:port/addBook
http://ip:port/delBook
restful 风格api:
GET请求 http://ip:port/book
POST请求 http://ip:port/book
DELETE请求 http://ip/port/book
我的理解restful就是面向对象,把每个资源都看成一个对象,形成一个唯一的URI。然后结合http方法进行各种curl操作。
结合上面两个示例,非restful api大多只使用getpost。然后定义api时以动词+名词结合使用。
而restful api的格式是URI上只有名词,不存在动词。区分不同的操作以http自定义的方法区分:
查看 GET
新增 POST
删除 DELETE
局部更新 PUT
全部更新 PATCH
二、代码范例
@org.springframework.web.bind.annotation.RestController
@RequestMapping("/bookPack/book")
public class RestController {
@RequestMapping(method = RequestMethod.GET)
public void get(){
System.out.println("get book");
}
@RequestMapping(method = RequestMethod.POST)
public void post(){
System.out.println("post:add a new book");
}
@RequestMapping(method = RequestMethod.PUT)
public void put(){
System.out.println("put :replace(create or update) a book");
}
@RequestMapping(method = RequestMethod.PATCH)
public void patch(){
System.out.println("patch: update a part of a book");
}
@RequestMapping(method = RequestMethod.DELETE)
public void delete(){
System.out.println("delete a book");
}
}
该段示例代码就是将书包中书作为一个资源对象,匹配的资源URI就是/bookPack/book,
对应的各种curl其实就是不同的http方法予以区分,访问的api都是一样的。
至于使用哪种http方法,这个要结合业务使用,不要被方法名所迷惑,要结合实际使用场景。
三、http方法
get:获取方法。幂等
post:新增,非幂等
delte:删除,幂等
put:全更新,幂等。如果参数不全,不传的参数将修改为null
patch:部分更新,幂等。如果参数不全,只更新传参数的部分
四、幂等
幂等就是不管执行多少次重复操作,最后结果保持不变。
结合使用效果可以看出 http方法:post 非幂等,getdeleteputpatch为幂等