Loading

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=张三
    }
}

9:@RequestMapping 标签的属性

posted @ 2021-08-06 22:16  JereCode  阅读(47)  评论(0编辑  收藏  举报