SpringBoot (五) --------- 接口架构风格 RESTful

目录

  • 一、认识 REST
  • 二、RESTful 的 注解
  • 三、RESTful 优点
  • 四、注解练习
  • 五、HTTP Client 工具
  • 六、RESTful 总结


一、认识 REST

REST (英文:Representational State Transfer,简称 REST,中文:表现层状态转换)。

一种互联网软件架构设计的风格,但它并不是标准,它只是提出了一组客户端和服务器交互时的架构理念和设计原则,基于这种理念和原则设计的接口可以更简洁、更有层次。

REST这个词,是 Roy Thomas Fielding 在他 2000 年的博士论文中提出的。

任何的技术都可以实现这种理念,如果一个架构符合 REST 原则,就称它为 RESTFul 架构。
比如我们要访问一个 http 接口 :http://localhost:8080/boot/order?id=1021&status=1 。

采用 RESTFul 风格则 http 地址为:http://localhost:8080/boot/order/1021/1 。

二、RESTful 的 注解

SpringBoot 开发 RESTful 主要是几个注解的实现

  • @PathVariable

获取 url 中的数据,该注解是实现 RESTful 的最重要的一个注解

  • @PostMapping

接收和处理 Post 方式的请求

  • @DeleteMapping

接收 delete 方式的请求,作用是删除数据,可以用 GetMapping 代替

  • @PutMapping

接收 put 方式的请求,作用是添加数据,可以用 PostMapping 代替

  • @GetMapping

接收 get 方式的请求

三、RESTful 优点

  • 轻量,直接基于 http,不再需要任何别的诸如消息协议 get/post/put/delete 为 CRUD 操作。

  • 面向资源,一目了然,具有自解释性。

  • 数据描述简单,一般以 xml,json 做数据交换。

  • 无状态,在调用一个接口 (访问、操作资源) 的时候,可以不用考虑上下文,不用考虑当前状态,极大的降低了复杂度。

  • 简单、低耦合。

四、注解练习

controller 类

package com.fancy.springbootmybatis.controller;

import org.springframework.web.bind.annotation.*;

@RestController
public class MyRestController {

     // get 请求

 /*   rest 中, url 要使用占位符, 表示传递的数据
    占位符叫做路径变量, 用来获取在 url 中的数据

    格式 : 在 @RestMapping 的value 属性值中, 使用 {自定义名称}
    http://localhost:8080/myweb/student/1001/hihi
 */

/*    @PathVariable: 路径变量注解, 作用是获取 url 中的路径变量的值
       属性 : value 路径变量名称
       位置 : 在逐个接收参数中, 在形参定义的前面
    注意 : 路径变量名和形参名一样, value可以不选

 */

    @GetMapping(value = "/student/{studentId}/{classname}")
    public String queryStudent(@PathVariable(value="studentId") Integer id, @PathVariable String classname) {
        return "get 请求, 查询学生 studentId : " + id + ", 班级: " + classname;
    }


    @GetMapping(value = "/student/{studentId}/school/{schoolname}")
    public String queryStudentBySchool(@PathVariable(value = "studentId") Integer id, @PathVariable String schoolname) {
        return "get 请求, 查询学生 studentId :" + id + ", 班级 : " +schoolname;
    }

    @PostMapping("/student/{stuId}")
    public String createStudent(@PathVariable("stuId") Integer id, String name, Integer age) {
        return "post 创建学生, id=" + id + ", name=" + name + ", age=" + age;
    }

    @PutMapping("/student/{stuId}")
    public String modifyStudent(@PathVariable("stuId") Integer id, String name) {
        System.out.println("======== put 请求 =========");
        return "put 修改学生, id = " + id + ", 修改的名称是: " + name;
    }
    
    @DeleteMapping("/student/{stuId}") 
    public String removeStudent(@PathVariable("stuId") Integer id) {
        System.out.println("======= delete 请求方式 ========");
        return "delete 删除学生, id=" + id;
    }
}

application.properties 文件
在这里插入图片描述
请求路径冲突

@GetMapping(value = "/student/{studentId}/{classname}")
@GetMapping(value = "/student/{studentId}/{schoolname}")

这样的路径访问会失败, 路径有冲突

解决:设计路径,必须唯一, 路径 uri 和 请求方式 必须唯一

五、HTTP Client 工具

使用 IDEA HTTP Client 模拟发送请求,进行测试

Tools —> HTTP Clients —> Create Request in HTTP Client

SpringBoot (五) --------- 接口架构风格 RESTful_第1张图片
在页面内对请求地址进行修改,然后点击运行
SpringBoot (五) --------- 接口架构风格 RESTful_第2张图片
运行结果
SpringBoot (五) --------- 接口架构风格 RESTful_第3张图片
添加请求

SpringBoot (五) --------- 接口架构风格 RESTful_第4张图片
SpringBoot (五) --------- 接口架构风格 RESTful_第5张图片
put 请求可以通过 post 请求转换得到
SpringBoot (五) --------- 接口架构风格 RESTful_第6张图片

六、RESTful 总结

请求 功能
post 请求
delete 请求
put请求
get请求
  • 请求路径不要出现动词

例如 :查询订单接口

/boot/order/1021/1 (推荐)
/boot/queryOrder/1021/1 (不推荐)

  • 分页、排序等操作,不需要使用斜杠传参数

例如 :订单列表接口

/boot/orders?page=1&sort=desc
一般传的参数不是数据库表的字段,可以不采用斜杠

你可能感兴趣的:(SpringBoot,restful,spring,boot,架构)