前端后端概念
后端:提供数据,处理业务逻辑,Server-side MVC架构,代码跑到服务器上
前端:接收数据,返回数据,处理渲染逻辑,Client-side MV*架构,代码跑到服务器上
前端后端数据传输形式
后端提供给前端的数据以json的形式进行传递
前段以Ajax的形式接受数据及返回数据
接口规范
接口返回数据即显示:前端仅做渲染逻辑处理;
渲染逻辑禁止跨多个接口调用;
前端关注交互、渲染逻辑,尽量避免业务逻辑处理的出现;
请求响应传输数据格式:JSON,JSON数据尽量简单轻量,避免多级JSON的出现;
GET请求、POST请求必须包含key为body的入参,所有请求数据包装为JSON格式,并存放到入参body中,示例如下:
xxx/login?body={"username":"admin","password":"123456","captcha":"scfd","rememberMe":1}
响应的基本格式
{ code: 200, data: { message: "success" }}
code : 请求处理状态
200: 请求处理成功
500: 请求处理失败
401: 请求未认证,跳转登录页
406: 请求未授权,跳转未授权提示页
data.message: 请求处理消息
code=200 且 data.message=“success”: 请求处理成功
code=200 且 data.message!=“success”: 请求处理成功, 普通消息提示:message内容
code=500: 请求处理失败,警告消息提示:message内容
响应实体格式
{ code: 200, data: { message: "success", entity: { id: 1, name: "XXX", code: "XXX" } }}
data.entity: 响应返回的实体数据
响应列表格式:data.list: 响应返回的列表数据
响应的分页格式
{ code: 200, data: { recordCount: 2, message: "success", totalCount: 2, pageNo: 1, pageSize: 10, list: [ { id: 1, name: "XXX", code: "H001" }, { id: 2, name: "XXX", code: "H001" } ], totalPage: 1 }}
data.recordCount: 当前页记录数
data.totalCount: 总记录数
data.pageNo: 当前页码
data.pageSize: 每页大小
data.totalPage: 总页数
1.接口的概念
使用Ajax请求数据时,被请求的URL地址,就叫做数据接口(简称接口)。同时,每个接口必须有请求方式
2.接口的请求过程
3.接口测试工具
为了验证接口能否被正常被访问,我们常常需要使用接口测试工具,来对数据接口进行检测。
好处:接口测试工具能让我们在不写任何代码的情况下,对接口进行调用和测试。
1.概念
接口文档,顾名思义就是接口的说明文档,它是我们调用接口的依据。好的接口文档包含了对接口URL,参数以及输出内容的说明,我们参照接口文档就能方便的知道接口的作用,以及接口如何进行调用。
2.接口文档的组成部分
①.接口名称:用来标识各个接口的简单说明,如登录接口,获取图书列表接口等。
②.接口URL:接口的调用地址。
③.调用方式:接口的调用方式,如GET 或 POST。
④.参数格式:接口需要传递的参数,每个参数必须包含参数名称、参数类型、是否必选、参数说明这4项内容。
⑤.响应格式:接口的返回值的详细描述,一般包含数据名称、数据类型、说明3项内容。
⑥.返回示例(可选)︰通过对象的形式,例举服务器返回数据的结构。
3.案例
uri参数
@GetMapping("/demo/{id}")
public void demo(@PathVariable(name = "id") String id, @RequestParam(name = "name") String name) {
System.out.println("id="+id);
System.out.println("name="+name);
}
Body参数(context-type)
@PostMapping(path = "/demo")
public void demo1(@RequestBody Person person) {
System.out.println(person.toString());
}
无注解 或者 @RequestParam
获取并解析body中的multipart/form-data和x-www-form-urlencodedmultipart/form-data既可以用做文件数据的传输也可以做键值对的传输(一般做文件传输的时候都要使用这种格式)x-www-form-urlencoded只能用做键值对
@PostMapping(path = "/demo2")
public void demo2(Person person) {
System.out.println(person.toString());
}
SpringMVC通过使用HandlerAdapter 配置的HttpMessageConverters来解析HttpEntity中的数据,然后绑定到相应的bean上
1.URL传参
?传参
http(s): //域名/项目名/接口名?key1=value1&key2=value2
restful风格(地址传参)
http(s): //域名/项目名/接口名/value1/value2(这种方法传的参数不是键值对)
2.表单传参
3.Json传参
1、直接把表单的参数写在Controller相应的方法的形参中,适用于GET 和 POST请求方式。
@RestController
@RequestMapping("/test")
public class testController {
@RequestMapping("/login")
public String login(String username,String password) {
System.out.println("username is:"+username);
System.out.println("password is:"+password);
return "success";
}
}
2、通过HttpServletRequest接收,适用于GET 和 POST请求方式。
@RestController
@RequestMapping("/test")
public class testController {
@RequestMapping("/login")
public String login(HttpServletRequest request) {
String username=request.getParameter("username");
String password=request.getParameter("password");
System.out.println("username is:"+username);
System.out.println("password is:"+password);
return "success";
}
}
3、用注解@RequestParam绑定请求参数到方法入参,适用于GET 和 POST请求方式。
@RestController
@RequestMapping("/test")
public class testController {
@RequestMapping("/login")
public String login(@RequestParam("username") String username,@RequestParam("password") String password) {
System.out.println("username is:"+username);
System.out.println("password is:"+password);
return "success";
}
}
4.用注解@PathVariable接受rest风格请求参数到方法入参 ,适用于GET 和 POST请求方式。
@RestController
@RequestMapping("/test")
public class testController {
@RequestMapping("/login/{username}/{password}")
public String login(@PathVariable("username") String username,@PathVariable("password") String password) {
System.out.println("username is:"+username);
System.out.println("password is:"+password);
return "success";
}
}
5、用注解@RequestBody绑定请求参数到方法入参 ,用于POST请求
@RestController
@RequestMapping("/test")
public class InnerController {
@RequestMapping(value="/login",method=RequestMethod.POST)
public String login(@RequestBody User user) {
System.out.println("username is:"+user.getUsername());
System.out.println("password is:"+user.getPassword());
return "success";
}
}