一、什么是Restful
Restful是一种软件架构风格、设计风格, 提供了一组设计原则和约束条件
二、关键原则
无状态原则
三、RESTful为什么强调客户端和服务器之间是无状态的?
, 在分布式web系统下,有多个可用服务器,每个服务器都可以处理客户端请求, 传统的有状态请求,因为状态信息只保存在第一次发起请求的那台服务器上,之后的请求都只能由这台服务器来处理,服务器无法自由调度请求。无状态请求则完全没有这个限制。其次,无状态请求有较强的容错性和可伸缩性。如果一台服务器宕机,无状态请求可以透明地交由另一台可用服务器来处理,而有状态的请求则会因为存储请求状态信息的服务器宕机而承担状态丢失的风险
四、Restful使用http动词有哪些, 分别代表什么意思?
GET(SELECT): 从服务器取出资源(一项或多项)。
POST(CREATE): 在服务器新建一个资源。
PUT(UPDATE): 在服务器更新资源(客户端提供改变后的完整资源)。
DELETE(DELETE): 从服务器删除资源。
PATCH(UPDATE): 在服务器更新资源(客户端提供改变的属性)。
HEAD: 获取资源的元数据。
OPTIONS: 获取信息,关于资源的哪些属性是客户端可以改变的。
CONNECT: 通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)
五、Restful实例
/**
* 创建一个学生
* 注意:因为我这个是一个接口,主要是生成swagger前台桩给前台使用的(使用这个之后就不需要手写API接口文档了)
* 所以这个@RequestBody注解在这里其实是不生效的,重点是得在实现类里面加上,否则就获取不到参数了,@PathVariable同理
*
* @return Student
*/
@RequestMapping(name = "/students", method = RequestMethod.POST)
StudentDTO createStudent(@RequestBody StudentDTO student);
/**
* 获取所有学生
*
* @return List<StudentDTO>
*/
@RequestMapping(name = "/students", method = RequestMethod.GET)
List<StudentDTO> getStudents();
/**
* 获取一班的学生
* 注意:有时可能会遇到两个URL和请求方法都相同的方法(比如这个和上边那个),可以像下面这样写
* RequestMapping里有个params属性,再找到一个特殊的不重复的参数名标记即可
* @return List<StudentDTO>
*/
@RequestMapping(name = "/students", method = RequestMethod.GET, params = "classId")
List<StudentDTO> getClassOneStudents(@RequestParam String classId);
/**
* 获取指定学生
*
* @return StudentDTO
*/
@RequestMapping(name = "/students/{id}", method = RequestMethod.GET)
StudentDTO getStudent(@PathVariable String id);
/**
* 删除指定学生
*
* @return StudentDTO
*/
@RequestMapping(name = "/students/{id}", method = RequestMethod.DELETE)
StudentDTO deleteStudent(@PathVariable String id);
/**
* 更新某个指定学生
*
* @param id 指定学生Id
* @param student 学生信息(传输对象,实际与student对象属性应该一致)
* @return StudentDTO
*/
@RequestMapping(name = "/students/{id}", method = RequestMethod.PUT)
StudentDTO modifyStudent(@PathVariable String id, @RequestBody StudentDTO student);
OPTIONS请求,这个请求一般是在要跨域请求之前由浏览器发起的一次预检验请求,然后服务器告知浏览器允许跨域的方法和域名,然后再请求的时候浏览器就会知道是否该拦截跨域请求了