一、 Rest名词由来概述
简述 Rest 这个名次 首先我们需要了解 Roy Tomas Fields 这个人。Fields 生于1965年是美国的计算机科学家,参与了HTTP协议规范制定,是 Apache HTTP Server 联合创始人之一,是 Representational State Transfer (REST) 规范的制定者。
二、Rest 名词概述
Rest (Representational State Transfer)字面上是表现层状态转移的意思,稍微深入理解一点就是从URI获得的资源在表现层进行状态的转移。
-
资源: 就是URI(在Rest里面又可以称为 End Point) 请求获得资源。
-
表现层:就是资源的表现形式,比如说以字符串方式表现,以json或者XML方式形式表现。
-
状态转移:就是对资源操作后的状态,比如对资源进行访问,修改,添加,删除。
如果我们开发的网站符合Rest风格设计规范,那么我们统称为Rest风格网站。
三、 HTTP对应Rest的行为
-
GET请求对应Rest里面的访问。
-
POST请求对应Rest里面的新增。
-
PUT请求对应Rest里面的修改。
-
PATCH请求对应Rest里面的修改,这个比较少用,是java不提倡的方式之一。
-
DELETE对应Rest里面的删除。
有关HTTP其他行为在此不概述,不是本文重点。
四、 Rest风格开发不合理示例
4.1 在Rest风格中URI不推荐使用动词
错误: @GetMapping(“uri/get/1327”)
正确: @GetMapping(“uri/1327”)
4.2 在Rest分格中不推荐使用版本号
在Rest风格中URI获取资源是唯一的,不存在几个版本的说法。
错误: @GetMapping(“uri/v1/1327”)
正确: @GetMapping(“uri/1327”)
4.3 经验之谈如果是复数建议使用复数形式
比如请求的用户是多数,那么使用复数形式。
不推荐: @GetMapping(“uri/user/1327”)
推荐: @GetMapping(“uri/users/1327”)
五、 使用SpiingMVC开发遵循Rest规范概述
在spring4.3 之前 注解对应:
-
@RequestMapping(path ="/uri/youku1327",method = RequestMethod.GET)
-
@RequestMapping(path ="/uri/youku1327",method = RequestMethod.POST)
-
@RequestMapping(path ="/uri/youku1327/{id}",method = RequestMethod.PUT)
-
@RequestMapping(path ="/uri/youku1327/{id}",method = RequestMethod.DELETE)
在spring4.3之后对@RequestMapping注解进行了封装:
-
@GetMapping("/uri/youku1327")
-
@PostMapping("/uri/youku1327")
-
@PutMapping("/uri/youku1327/{id}")
-
@DeleteMapping("/uri/youku1327/{id}")
spingmvc常用注解概述:
-
在URL中的变量可以使用@PathVariable注解获得;
-
参数使用json格式,可以使用@RequestBody注解接收,将json对象转为java对象;
-
响应数据使用 @ResponseBody注解将java对象转为json响应给前端;消息的转换内部是通过HttpMessageConvert进行实现;
-
后面还提供了@RestController注解里面封装了@Controller和@ResponseBody注解,简化开发,自动响应为josn格式,默认是"application/json;chartset=UTF-8";
-
PostMapping等行为注解里面有consumers表示限定该方法的请求类型;produces表示限定该方法返回的媒体类型。
-
响应的返回值可以使用ResponseEntity实体类,里面可以封装body,head,status;
-
通常的响应状态码我们可以使用HttpStatus枚举结合@ResponseStatus方式;
-
自定义异常使用@ControllerAdvice 结合 @ExceptionHandler 方式;