1、RESTful简介
REST
的全称:REpresentational State Transfer
译为“表现层状态转移”
REST
是一种互联网软件架构设计风格
定义一组用于创建web
服务的约束
符合REST
架构的Web
服务,称为RESTful Web
服务
2、RESTful风格
URL
中使用名词(建议用复数形式),不使用动词
推荐:/books
、/books/6
不推荐:/listBooks
、/getBooks?id=6
、/book/list
、/book/get?id=6
使用HTTP
的方法表达动作
GET:查询 | POST:创建 | PUT:更新 | DELETE:删除 | |
---|---|---|---|---|
/books |
查询所有书 | 创建一本书 | 更新所有书的信息 | 删除所有书的信息 |
/books/6 |
查询id为6的书 | 405 Method Not Allow | 更新id为6的书的信息 | 删除id为6的书的信息 |
一个资源连接到其他资源使用的是子资源的形式
GET /books/6/pages/77
POST /books/7/pages
2.1、使用时的注意点
1、API
版本化,使用不同的版本的两个接口v1
、v2
sj.com/v1/books
sj.com/v2/books/6
2、返回数据发生错误时,不要返回200状态码
2.2、PUT、DELETE
浏览器的form
不支持put
、delete
,可以使用HiddenHttpMethodFilter
进行转化
put
请求:post
+ _method
= put
delete
请求:post
+ _method
= delete
<form action="${ctx}/skills/10" method="post">
<input type="hidden" name="_method" value="put">
<button type="submit">提交</button>
</form>
以上的form
请求,匹配的method
为put
@Controller
@RequestMapping("/skills")
public class SkillController {
@PutMapping("/{id}")
public String update(@PathVariable("id") Integer id, Skill skill) {
System.out.println("update");
return "更新成功";
}
}
为了安全起见,现在很多公司都严格禁用
PUT
、DELETE
请求
2.3、@RestController
@RestController = @Controller + @ResponseBody
1、使用@RestController
默认情况下都会方法增加@ResponseBody
2、如果希望跳转到页面,还是得使用ModelAndView
对象
@RestController
public class TestController {
@GetMapping("/{id}")
public Skill get(@PathVariable("id") Integer id) {
return null;
}
@GetMapping("/view/{id}")
public ModelAndView view(@PathVariable("id") Integer id) {
ModelAndView mv = new ModelAndView();
mv.setViewName("/page/index.jsp");
mv.addObject("name", "jack");
return mv;
}
}
网友评论