RESTful:
前后端分离开发的项目中,前后端之间是接口进行请求和响应,后端向前端提供请求时就要对外暴露一个URL;URL的设计不能是随意的,需要遵从一定的设计规范——RESTful。
RESTful是一种web api的标准,也就是一种url设计风格/规范。
1.每个URL请求路径代表服务器上的唯一资源。
//传统的URL设计:
http://localhost:8080/goods/delete?goodsId=1 //商品1
http://localhost:8080/goods/delete?goodsId=2 //商品2
//RESTful设计:
http://localhost:8080/goods/delete/1 //商品1
http://localhost:8080/goods/delete/2 //商品2
修改GoodsController.java:
@Controller
@RequestMapping("/goods")
@Api(value = "提供商品添加,修改,删除及查询的相关接口",tags = "商品管理")
public class GoodsController {
@RequestMapping(value = "/add",method = RequestMethod.POST)
public ResultVO addGoods(){
return null;
}
// @ApiIgnore
@RequestMapping(value = "/delete/{gid}")
public ResultVO deleteGoods(@PathVariable("gid") int goodsId){
System.out.println("---------------" + goodsId);
return new ResultVO(10000,"delete success",null);
}
@RequestMapping(value = "/update",method = RequestMethod.PUT)
public ResultVO updateGoods(){
return null;
}
@RequestMapping(value = "/list",method = RequestMethod.GET)
public ResultVO listGoods(){
return null;
}
}
查看swagger文档:
进行删除测试:
http://localhost:8080/goods/delete/1
http://localhost:8080/goods/delete/2
控制台:
删除成功!
2.使用不同的请求方式表示不同的操作
springmvc对RESTful风格提供了很好的支持。在我们定义一个接口的URL时,可以通过两种方式:“RequestMapping(value="/{id}",method=RequestMethod.GET)”方式指定请求方式;也可以使用特定请求方式的注解设定URL:“@PostMapping("/add")”,“@DeleteMapping("/{id}")”,“@PutMapping("/{id}")”,“@GetMapping("/{id}")”
post 添加
get 查询
put 修改
delete 删除
option (预检)
根据ID删除一个商品:【delete】
@RequestMapping(value = "/{id}",method = RequestMethod.DELETE)
public ResultVO deleteGoods(@PathVariable("id") int goodsId){
System.out.println("---------------" + goodsId);
return new ResultVO(10000,"delete success",null);
}
根据ID查询一个商品:【get】
@RequestMapping(value = "/{id}",method = RequestMethod.GET)
public ResultVO getGoods(@PathVariable("id") int goosId){
return null;
}
3.接口响应的资源的表现形式采用JSON(或者XML)
在控制器类 或者 每个接口方法添加“@ResponseBody”注解,将返回的对象格式化为JSON。
或者直接在控制器类使用@RestController注解声明控制器。
GoodsController.java:
@RestController
//@Controller
//@ResponseBody
@RequestMapping("/goods")
@Api(value = "提供商品添加,修改,删除及查询的相关接口",tags = "商品管理")
public class GoodsController {
@PostMapping("/add")
public ResultVO addGoods(){
return null;
}
// @ApiIgnore
@DeleteMapping("/{id}")
//@ResponseBody
public ResultVO deleteGoods(@PathVariable("id") int goodsId){
System.out.println("---------------" + goodsId);
return new ResultVO(10000,"delete success",null);
}
@PutMapping("/{id}")
//@ResponseBody
public ResultVO updateGoods(){
return null;
}
@GetMapping(value = "/list")
//@ResponseBody
public ResultVO listGoods(){
return null;
}
@RequestMapping(value = "/{id}",method = RequestMethod.GET)
//@ResponseBody
public ResultVO getGoods(@PathVariable("id") int goosId){
return null;
}
}
4.前端(Android、ios、pc)通过无状态的HTTP协议与后端接口进行交互。