《Spring Boot 趣味实战课》读书笔记(四)

news/2024/4/17 4:14:40/文章来源:https://blog.csdn.net/fangzhan666/article/details/129689607

你有 REST Style 吗

你应该懂一点 HTTP

  • HTTP 就是 HyperText Transfer Protocol(超文本传输协议)的缩写。
    • 它是一种关于“传输”的协议,既然是传输,那么至少要在两个对象之间进行,在 HTTP 中对应的就是客户端和服务端。
    • 客户端和服务端对应两个动作——请求和响应。
    • 客户端向服务端发送请求,而服务端则根据客户端的请求做出相应的响应。

报文

  • HTTP 的报文有两种——请求报文和响应报文。
    • 请求报文
      • 开头的 GET 表示请求的类型,称为 HTTP 的方法(Method)。
      • 之后的 /v3/api-docs 表示请求的路径。
      • HTTP/1.1 表示本次请求使用的 HTTP 协议的版本。
      • 接下来的 Host 和 Accept 都属于首部(Header)字段,属于可选字段。
      • 空行下面的…代表实体的主体(Entity Body)部分,同样是可选内容。
      • 这段请求内容的意思是:以 GET 方式基于 HTTP 协议的 1.1 版本请求访问 localhost:8080 服务器上的/v3/api-docs 资源。
        在这里插入图片描述
    • 响应报文
      • 开头的 HTTP/1.1 与请求报文的意义相同。
      • 之后的 200 OK 表示响应的状态码(Status Code)和原因短语(Reason-Phrase)。
      • 接下来的 Date、Content-Type 等都属于首部字段。
      • 接着以空行分隔,最后的…与请求报文一样是资源实体的主体。
        在这里插入图片描述

报文结构

  • 报文由 3 部分组成:
    • 起始行(请求行、响应行)
      • 报文的第一行,请求行(请求报文中的起始行)用来说明要做什么,响应行(响应报文中的起始行)用来说明结果如何。
    • 首部
      • 起始行后面有零到多个首部字段,首部字段由 key:value 的方式构成。
      • 首部以一个空行结束。
    • 主体(部分请求方法没有主体)
      • 空行之后是报文主体,请求主体包含了客户端发送给服务端的数据;
      • 响应主体则是服务端要返回给客户端的内容。
      • 起始行和首部都是文本格式,且其结构都是相对固定的。而主体则不一样,主体中可以包含任何格式的数据(如文本、图片、音频、视频、其他文件)。

状态码

  • 状态码与原因短语用来描述请求的处理结果。
    在这里插入图片描述

安全性与幂等性

  • 安全性与幂等性指的都是 HTTP 方法的特性。
    • 安全性指的是不会对服务端造成影响,无论如何请求,服务端都不会因为这个请求而发生变化,简而言之就是只读。
    • 幂等性指的是多次请求对服务器造成的影响与第一次请求完全一样。
      在这里插入图片描述
  • 安全性与幂等性依赖于服务端实现,这种方式是一种契约。
    • 并不是说将一个删除操作的接口设置为 GET 请求(它依然具备安全性);
    • 而是说对应类型的请求在实现的时候要符合它们的安全性、幂等性约定。

接口代言人 Swagger

  • Swagger 是一款用于生成、描述、调用和可视化 RESTful 风格的 Web 服务接口文档的框架。
    • 其最大的特点在于可以使接口文档与代码实时同步。
    • 通常的做法是将接口文档写在公司内部的 Wiki 上(Confluence)。
    • 但这种做法的致命缺点就是接口文档几乎永远都会落后于实际代码实现,让我们的开发工作无法顺畅地进行下去。
    • 为了解决这些问题,Swagger 应运而生。
    • Swagger 不仅可以实时展示接口信息,还可以对接口进行调试。

整合

  • 要使用 Swagger,首先需要添加 Swagger 对应的依赖:
    <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version>
    </dependency>
    
  • 然后需要添加 Swagger 的基础配置:
    @EnableOpenApi
    @Configuration
    public class SwaggerConfig {/*** 返回 restful api* @return*/@Beanpublic Docket createRestApi() {return new Docket(DocumentationType.OAS_30).apiInfo(apiInfo()).select()/** apis 用于告诉 Swagger 扫描带有 @Api 注解的类*/.apis(RequestHandlerSelectors.withClassAnnotation(Api.class)).paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("Spring Boot 趣味实战课").description("Spring Boot 趣味实战课的 RESTFul 接口文档说明").version("1.0").build();}
    }
    
  • 最后需要在接口上添加一些 Swagger 的注解:
    @RestController
    @RequestMapping("/rest")
    @Api(tags = "RestFul 接口")
    public class RestFulController {@GetMapping("/swagger")@ApiOperation(value = "Swagger 接口")public String swagger() {return "Swagger Method";}
    }
    

常用注解

  • Swagger 常用的 5 个注解:
    在这里插入图片描述
  • 增强版 User 类:
    @Data
    public class User {@ApiModelProperty("用户ID")private int id;@ApiModelProperty("名字")@NotBlank(message = "名字不能为空")private String name;@ApiModelProperty("年龄")@Min( value = 1,message = "年龄要不能小于 1")@Max( value = 120,message = "年龄要不能大于 120")private int age;@ApiModelProperty("邮箱")@Email(message = "Email格式不正确")private String email;@ApiModelProperty("生日")@Past(message = "生日必须为过去的时间")private LocalDate birthDay;
    }
    

增强版

  • 有一款增强版的工具 knife4j 能够弥补原生 Swagger 在使用体验和调试接口方面的不足。
    • 要使用 knife4j 也非常简单,只需要将依赖替换成如下内容即可:

      <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.3</version>
      </dependency>
      
    • 使用 knife4j 时,记得删除之前的 Swagger 依赖,因为 knife4j 依赖已经包含了 Swagger 依赖。

  • 启动工程并访问 knife4j 的默认地址(http://localhost:8080/doc.html):
    在这里插入图片描述
  • 除了 Swagger 的基础功能,knife4j 还有很多增强功能,如全局参数、请求参数缓存、接口排序、导出离线文档等非常实用的功能。

解密 REST

REST 定义

  • REST 是 Representational State Transfer 的缩写,翻译为中文就是“表现层状态转换”。
    • 简单来说,就是资源以什么样的形式来展现自己。
    • 例如,文本可以是 JSON 或 XML 格式的,图片可以是 JPEG 或其他格式的。
    • 状态转换说的是资源发生了变化。
    • “资源”的状态转换正是由 HTTP 的各种动作(方法)所引起的。
    • REST 的核心不仅仅是对数据的操作,还包括如何操作,以什么样的规范操作。

REST-Ful

  • 前/后端分离,移动互联网的爆发,导致后端服务不仅要为 Web 端提供支持,还要为移动端(如 Android、iOS 等)提供支持,那么对 API 的设计就显得格外重要了。
  • API 需要多端共享、多端统一,否则就会给后期的维护和扩展带来重大的灾难。
  • 这个时候,RESTful 凭借它结构清晰、易于理解、方便扩展的特性成了设计良好 API 的不二之选。
  • RESTful 风格的 API 要满足以下要求:
    • 用 URI 定位资源;
    • URI 由名词组成;
    • 使用 HTTP 方法操作资源。
      在这里插入图片描述

URL 与 URI

  • URI
    • Uniform Resource Identifier;
    • 统一资源标识符。
      在这里插入图片描述
  • URL
    • Uniform Resource Locator;
    • 统一资源定位符。
  • URN
    • Uniform Resource Name;
    • 统一资源名称。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_274044.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

KCon 2023兵器谱招募开启!以「兵器」会友,热血相聚!

2023第十二届 KCon大会已启动&#xff0c;议题招募正在火热进行中。&#xff08;点击查看&#xff09;与此同时&#xff0c;兵器谱召集也正式开启&#xff01;我们现诚邀众安全研究员踊跃展示「神兵利器」&#xff0c;以「兵器」会友&#xff0c;逐鹿网络江湖。 「器」既为容纳…

联合体在内存中的分布情况,大小端的判断方法

一、联合体的定义 联合是一种特殊的自定义类型 这种类型定义的变量也包含一系列的成员&#xff0c;特征是这些成员公用同一块空间&#xff0c;所以联合体也叫共用体。 //联合类型的声明 union Un { char c; int i; }; int main() { //联合变量的定义 union U…

项目二 任务三 训练5 交换机的HSRP技术

在“项目二 任务三 训练4 交换机的DHCP技术”基础上继续完成下列操作&#xff1a; 1、二层交换机50-2的配置 50-2>en 50-2#conf t Enter configuration commands, one per line. End with CNTL/Z. 50-2(config)#int 50-2(config)#interface g 50-2(config)#interface gigab…

什么是队列,如何实现?

欢迎来到 Claffic 的博客 &#x1f49e;&#x1f49e;&#x1f49e; “海色温柔&#xff0c;波浪缓慢&#xff0c;似乎在静静期待着新的一天。” 前言&#xff1a; 上期我们讲了栈&#xff0c;它的特点是“后入先出”。这次我们再来学习一个新的数据结构&#xff1a;队列&…

索尼mp4变成rsv的修复方法

索尼的摄像机在一些极端情况下(如断电)会生成RSV文件&#xff0c;遇到这种情况我们应该如何处理&#xff1f;下面来看看今天这个案例。故障文件:22.4G RSV文件故障现象:断电后仅生成了一个扩展名为rsv的文件&#xff0c;无法播放。故障分析:经过长时间处理索尼的摄像机&#xf…

WSO2 Apim Message Mediation (Api Policies)

WSO2 Apim Message Mediation 1. 版本区别2. 客制化2.1 Wso2 Integration Studio Install2.2 New Sequence2.3 测试

Element table组件内容\n换行解决办法

项目使用<el-table>组件 <el-table :data"warnings" :row-class-name"highlightRow" v-loading"isLoading"> <el-table-column label"ID" prop"id"/> <el-table-column label"时间" pro…

VS2022 webapi SQLite EFcore 最简单部署

一、我有一个sqlite单文件数据库&#xff0c;里面有一张表material&#xff0c;我想把这张表的数据&#xff0c;让c# webapi程序从服务器上输出成json,让客户端可以查询到数据。二、使用VS2022&#xff0c;安装ASP.net相关开发组件。三、VS2022中新建一个项目&#xff0c;项目的…

VMvare-linux没有图形化界面

镜像&#xff1a; linux centos7.5 软件&#xff1a;vmware 安装过程&#xff1a;基本一路默认 问题&#xff1a;安装成功后&#xff0c;只有命令行&#xff0c;没有图形界面 解决办法如下&#xff1a; 1、检测yum是否可以使用 yum list | tail2、开始安装 yum groupins…

前端git必备技能,如何合并分支以及出现合并冲突后如何解决

文章目录一、合并分支二、可能出现的冲突和解决三、过程分享一、合并分支 注意&#xff0c;我们常说的master或main主干也可以理解为分支&#xff0c;可以是分支合并到主干&#xff0c;或分支合并到分支。 需求&#xff1a;cloudweb的2.6.0和2.6.1是并行开发的&#xff0c;现…

【ZYNQ】制作从 QSPI Flash 启动 Linux 的启动文件

在 这篇文章 中学习了使用 PetaLinux 定制 Linux 的方法&#xff0c;制作了 SD 卡启动文件&#xff0c;本期介绍如何使用 PetaLinux 配置生成从 QSPI Flash 启动的 Linux 镜像文件。 复制 Petalinux 工程 如果我们想保留 SD 卡启动的 Petalinux 工程&#xff0c;但是又不想新…

晶晨S905D3切换到外部phy方法

文章目录 前言一、s905d3的以太网驱动的理解二、修改设备树注意前言 随着芯片的国产化推荐,越来越多的国产芯片被大家重视起来,但是国产的一些稍微高性能的芯片资料太少,这里把调实phy的流程记录一下,不做太多的理论分析 一、s905d3的以太网驱动的理解 如果拿到sdk后,默…

2023年湖北武汉市中高级职称评审要满足哪些硬性要求?启程别

2023年湖北武汉市中高级职称评审要满足哪些硬性要求&#xff1f;启程别 职称评审是指已经经过初次职称认定的专业技术人员&#xff0c;在经过一定工作年限后&#xff0c;在任职期内完成相应的继续教育学时&#xff0c;申报中级职称以上的人员须在专业期刊发表论文并且经过一些基…

存储管理 - 磁盘结构及调度算法

一.简介柱面&#xff1a;一个磁盘所有的盘面上同一个半径相同的磁道的圆形轨迹从上倒下依次组成一个圆柱体&#xff0c;就称作柱面&#xff0c;每个圆柱上的磁头由上而下从“0”开始编号。扇区&#xff1a;硬盘的读写以扇区为基本单位&#xff0c;而操作系统则以块为最小单位(扇…

图像基本变换

缩放与裁剪裁剪图像的裁剪&#xff0c;是指将图像的某个区域切割出来。一些常见的应用场景包括&#xff1a;* 感兴趣区域提取* 去除无用信息* 图像增强* 纠偏&#xff1a;去除不规则部分&#xff0c;将图像变得更加整齐事实上&#xff0c;图像裁剪的裁剪通常就是一个numpy矩阵切…

湖科大嵌入式实验课配套的stem32开发板使用说明

前言 本文档为湖科大嵌入式实验课配套的stem32开发板使用说明 这门课叫嵌入式系统及应用 大三下开课 板子长这样 感谢 lcw 的指导&#xff0c;让我少走弯路 安装 打开百度网盘链接 下载并安装keil 5 (MDK535.EXE) mdk518.exe应该也可以用&#xff0c;而且这个也可以汉化…

2022年18个值得期待的Learndash LMS插件列表

有数百个独特的LearnDash附加组件&#xff0c;您可能很难选择您的LearnDash LMS所需的。您可以集成 LearnDash 以扩展或限制功能&#xff0c;但您喜欢它。但真正的问题是如何为您的网站选择合适的插件&#xff1f;为了帮助简化此过程&#xff0c;我们精选了18个最值得期待的Lea…

git 分支创建、切换和合并

1.理解分支为了便于理解&#xff0c;大家可以粗略的将分支认为就是一个代码的副本。如果我们同时在一个代码上开发多个功能。还要修改一些bug&#xff0c;团队成员协作过程中&#xff0c;必然会出现相互影响。假如某个同事提交了一个错误的代码&#xff0c;可能会导致其他更新了…

设计循环队列(LeetCode)题目

这个也是力扣的题目&#xff0c;所以我们还是直接看 请自己看题目 下面就看思路吧&#xff0c;首先是循环队列&#xff0c;我们想一下循环队列如何设计&#xff0c;用什么设计比较好一点&#xff0c;用顺序表还是链表 这里用链表看起来比较简单&#xff0c;因为他是循环的&am…

干货|小白1分钟搞懂SRM管理系统

SRM管理系统是用来管理供应商&#xff0c;以及采购方和供应商进行采购交易的一套管理系统&#xff0c;在很多生产类企业中&#xff0c;往往是需要和ERP管理系统集成使用。原因&#xff1a;1.ERP管理系统无法实现采购商与供货商的有效协作&#xff1b;2.SRM管理系统对供应商的管…