本文介绍前后端分离的相关知识、后端接口的设计及开发过程中遇见的问题
参考《SpringBoot应用开发实战》
一、RESTlful Web服务
REST规范(Representational State Transfer),就是URL用以定位资源,HTTP动词用以描述操作,用于后端接口的设计。
1.HTTP动词
REST规范的关键在于使用URL和HTTP动词来描述”调用方“与”资源“的交互。
1.1常见HTTP动词
- GET:从服务端取出资源 ---->对应注解@GetMapping
- POST:在服务端新建资源 ---->@PostMapping
- PUT:在服务端更新资源(指客户端提供更改后完整的资源) ---->@PutMapping
- PATCH:在服务端更新资源(指客户端提供改变的属性) ---->@PatchMapping
- DELETE:从服务端删除资源 ---->@DeleteMapping
1.2GetMapping?RequestMapping?
GetMapping、PostMapping、PutMapping、PathMapping以及DeleteMapping这些“Mapping"本质上就是RequestMapping
这类注解的常用属性有:
- path:指定接口的URL访问路径
- params:指定请求中必须包含的参数
- headers:指定请求中必须包含的请求头
- consumes:指定请求的内容类型(Content-Type)
- produces:指定响应的内容类型(Content-Type)
2.请求与响应
1.HTTP报文
请求(Request)与响应(Response)属于HTTP报文的两种形式。
由客户端传递至服务端就称为请求,由服务端返回给客户端则称为响应。
HTTP报文结构:
- 起始行:用于描述请求或者响应的状态
- Header:HTTP头信息
- 空行:由CRLF字符组成的空行,用于分割HTTP头与HTTP报文体
- Body:报文体,用于搭建请求或者响应中的实体
2.简单请求与@RequestParam
当请求内容相对简单时,@RequestParam可用于提取请求参数,该注解为可选项。
@RequestParam有三个实用属性:name(Web参数值)、required(是否必传)及defaultValue(默认值)。
例:
@GetMapping
public String test(@RequestParam String name){
return name;
}
注意:@RequestParam的required属性默认为true,即如果未接收到对应参数或对应参数的值为null的话,接口会报错。
3.使用@PathVariable获取URL中的参数
@RequestParam和@PathVariable的API接口形式对比
- @RequestParam:形如 "/user?username=..." , 不同参数之间用&分隔,每个参数形如name=value的形式,分别表示参数名字和参数值
- @PathVariable:形如 "/user/{username}" , 该URL对应的接口根据占位符中内容的不同,展示不同的用户信息
例:
@GetMapping("/{name}")
public String test(@PathVariable String name){
return name;
}
4.@RequestBody与@ResponseBody
- @RequestBody:将请求体的内容反序列化为对应类实例
- @ResponseBody:将返回实例序列化为JSON字符串