RESTful
1: API 概念
api 是应用程序接口,比如某个服务器对外暴露出具有某个功能的请求url
,其他软件访问这个请求,得到想要的结果,这里面的请求url
就是 API ,我们项目也是在开发这些接口。
另外一种方式是,某软件把某些功能打包成jar包(组件),其他软件引入这些jar包(通常说的 SDK就是这些放着你想要的软件功能的软件包),通过调用api从而得到想要的功能。
2: 前后端分离模式 概念, 优缺点
-
概念
前后端分离模式是一种开发模式,也是web应用的一种架构模式。指的是前后端通过约定好数据交互接口来进行开发。
后端需要测试请求有没有问题的话,通过 postman 等接口测试工具即可
-
优缺点
-
责任清晰,前端不需要过多关注后端,后端不需要过多关注前端
- 前后端开发人员通过 API 文档就能进行数据交流
- 解耦,数据怎么展示,全部交给前端来处理,后端只负责提供数据。而前后端不分离的话,后端传给前端的Model,通常是通过hidden类型的Input来处理,或者是直接用模板技术生成,数据和展现并未分离。
-
3:restful风格相关概念, 资源, 状态, 请求方式, 响应值
-
概念:代表一种软件架构风格,我们前后端日常遵循的一套接口规范
-
资源:根据公司约定,一般是跟表名一致/实体类的复数形式,例如:employees
-
请求方式:通过统一的接口来对资源执行各种操作,如:增 POST 删 DELETE 改 PUT 查 GET
-
响应值:
200 正常,服务器成功返回用户请求数据(GET)
400 用户发出的请求有错误,服务器没有进行 POST 或 PUT 数据的操作
401 用户没有权限(token、用户名、密码错误)
403 表示用户得到授权(和401相反),但是访问是被禁止的
404 用户发出的请求不存在(找不到页面)
SpringBoot 中,如果启动类放错位置,也会导致404,原因在于启动类@SpringBootApplication里面的@ComponentScan注解,它是从启动类所在包开始,扫描当前包及其子级包下的所有文件。
500 服务器内部错误
4:restful风格接口设计
- 请求路径 (确定接口操作资源)
- 请求方式
- 增 POST
- 删 DELETE
- 改 PUT
- 查 GET
- 请求参数 (根据需求)
- 响应值 (根据需求,返回 JSON 格式)
5:员工 crud 接口设计【必须掌握】
参考项目: restful-demo
6:参数路径操作方式
可以使用参数路径来获取唯一标识( 如 "/employees/{id}"),这样SpringMVC就能解析了,避免ambiguous
接口获取路径参数,是通过@PathVariable注解
**@PathVariable注解使得控制器能够处理参数化的URL(将变量输入作为URL的一部分)**
**1. 如下代码,这里没有为@PathVariable设置值,方法的参数名会作为路径变量名,如下**
@Controller
public class EmployeeController {
@RequestMapping(value = "/employees/{id}", method = RequestMethod.GET)
@ResponseBody
public Employee showEmployee(@PathVariable Long id,String name) {
return new Employee(id,18,name); // http://localhost:8080/employees/2?name=张三
}
}
2. 形参和路径参数不一致,需要为@PathVariable设置值,如下
@Controller
@RequestMapping("/employees")
public class EmployeeController {
@GetMapping("/{eid}")
@ResponseBody
public Employee showEmployee(@PathVariable("eid") Long id,String name) {
return new Employee(id,18,name); // http://localhost:8080/employees/2?name=张三
}
}
7:页面发起接口请求
首先,在头标签引入 jQuery.js,然后编码
get 和 post 可以用 $.get(...) $.post(...) , 但 put 和 delete 需要用 $.ajax({...})
$.get(...) $.post(...) 的原理其实也是基于 $.ajax({...})
$(function(){
// 查询全部角色
$('#btn1').click(function(){
$.get("/employees",function(data){
console.log(data)
})
});
// 查询单个角色
$('#btn2').click(function(){
$.get("/employees/1",function(data){
console.log(data)
})
});
// 删除角色
$('btn3').click(function(){
$.ajax({
url:"/employees/1"
type:DELETE
success:function(data){
console.log(data)
}
})
});
})
8:restful风格接口简化开发
- 类上面贴注解 @RequestMapping("/employees") , 则代表每个映射路径前都已经加上了 "/employees"
- @RequestMapping(value = "/employees/{id}", method = RequestMethod.GET)
可以简化为 @GetMapping("/employees/{id}"),其他请求方式同理 - 类上面贴注解 @RestController,其实是 @Controller + @ResponseBody
@Controller
@RequestMapping("/employees")
public class EmployeeController {
@GetMapping("/{id}")
@ResponseBody
public Employee showEmployee(@PathVariable Long id,String name) {
return new Employee(id,18,name); // http://localhost:8080/employees/2?name=张三
}
}