千峰商城-springboot项目搭建-09-RESTfulURL设计规范
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协议与后端接口进行交互。