
如果本篇文章对你有帮助,请点赞,关注,收藏,你的支持就是我最大的动力!

前言:上一章我们通过了前后端联调来测试登录界面,之后通过断点debug的方式跟踪了程序的运行,这一章我们主要讲解前端是如何将数据返回给后端的,以及代理相关知识。
关于前端请求地址 是否等于 后端接口地址,
在开发初期或简单的个人项目中,前端代码和后端代码可能运行在同一台机器的不同端口上,前端直接请求后端的完整地址。
当项目上线后,前端代码(HTML、CSS、JS)和后端代码通常不会部署在同一个服务上。
https://www.myapp.com (用户访问的网站)
https://api.myapp.com (后端提供的服务地址)
这时,如果前端代码里请求的地址仍然是 http://localhost:3000/api/users,那显然是不对的,因为用户手机上并没有一个叫 localhost 的后端。
解决方案: 前端必须请求线上的后端地址。
https://api.myapp.com/api/users
https://api.myapp.com/api/users
这时,前端请求地址 仍然等于 后端接口地址,只是从本地变为了线上域名。
当域名不同(www.myapp.com 请求 api.myapp.com)时,浏览器的同源策略会触发跨域问题,阻止请求。
为了解决这个问题,在实际开发中引入了一个非常重要的概念:代理(Proxy)。
为了让开发过程更顺畅,避免被跨域问题困扰,前端项目(特别是使用Vue/React脚手架创建的项目)通常会配置一个代理。
/api/users
vue.config.js 或 vite.config.js),告诉开发服务器:“凡是遇到 /api 开头的请求,都自动转发到 https://api.myapp.com 去。”
http://localhost:8080)请求 /api/users。
https://api.myapp.com/api/users。
localhost:8080 通信,所以没有跨域问题。
在这种模式下,两者的关系是:
前端请求地址(相对路径) + 代理配置(转发规则) = 后端接口地址(完整路径)
场景 | 前端请求地址 | 后端接口地址 | 关系 |
|---|---|---|---|
本地直连 | http://localhost:3000/api/users | http://localhost:3000/api/users | 相等 |
生产环境 | https://api.myapp.com/api/users | https://api.myapp.com/api/users | 相等 |
开发代理 | /api/users (相对路径) | https://api.myapp.com/api/users | 代理转换 |
nginx反向代理,就是将前端发送的动态请求由nginx转发到后端服务器
反向代理就是:
用户(前端) -> 请求 -> Nginx(接线员/保安) -> 转发 -> 真正的后端服务器(干活的)
核心特点:代理的是服务器。 你知道一个固定的电话(域名),但电话那头是一个总机(Nginx),总机根据你拨的分机号,把电话转接到真正接电话的人(后端服务器)。
www.baidu.com。
www.baidu.com,你的电脑向这个地址发起请求。图片服务器群 去处理。”解决跨域问题(让它们看起来同源) |
|---|
实现负载均衡(分派任务) |
提供安全屏障(隐藏真实服务器) |
统一配置通用功能 |
在Nginx的配置文件中配置:
server listen 80; server_name localhost; location /api/{ proxy_pass http://localhost:8080/admin/;#反向代理 nginx.conf
upstream webservers{ server 192.168.100.128:8080;server 192.168.100.129:8080; server{ listen 80; server name localhost; location /api/{proxy_pass http://webservers/admin/;#负载均衡 nginx.conf
这里转发的地址,webservers,里面配置的是后端服务的ip地址,端口号,前端发过来的请求如果能匹配上,就会经过负载均衡,平均的进行分配。
nginx负载均衡策略:
名称 | 说明 |
|---|---|
轮询 | 默认方式 |
weight | 权重方式,默认为1,权重越高,被分配的客户端请求就越多 |
ip_hash | 依据ip分配方式,这样每个访客可以固定访问一个后端服务 |
least conn | 依据最少连接方式,把请求优先分配给连接数少的后端服务 |
url hash | 依据url分配方式,这样相同的url会被分配到同一个后端服务 |
fair | 依据响应时间方式,响应时间短的服务将会被优先分配 |
完善登录功能--密码存储
使用 password= DigestUtils.md5DigestAsHex(password.getBytes()); MD5
维度 | 传统方式 | 导入方式 |
|---|---|---|
形式 | 人类可读的文字、表格 | 机器可读的结构化数据(JSON/YAML) |
操作 | 人眼阅读 -> 人脑理解 -> 手动输入工具 | 工具直接读取 -> 自动生成请求模板 |
优点 | 适合描述复杂的业务逻辑 | 快、准、狠(速度快、拼写准、强类型校验) |
缺点 | 容易写错单词、维护成本高、效率低 | 需要后端生成标准格式的文档 |
这里我们选择在yapi中导入接口文档。
Swagger(现在叫 OpenAPI)是一套编写接口文档的规则,就像写菜谱必须按照“菜名、食材、步骤”来写一样。
http://localhost:8080/swagger-ui.html)
使用Swagger你只需要按照它的规范去定义接口及接口相关的信息,就可以做到生成接口文档,以及在线接口调试页面。官网: https://swagger.io/ Knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案。
维度 | Swagger | Postman | YApi |
|---|---|---|---|
本质 | 规范/标准 | 工具 | 平台 |
主要用户 | 后端开发 | 后端、前端、测试 | 整个团队 |
数据来源 | 代码自动生成 | 手动录入/导入 | 手动录入/导入 Swagger |
能不能调试 | ❌ 只能看 | ✅ 能发请求 | ✅ 也能发请求 |
能不能 Mock | ❌ | ✅ 有简易版 | ✅ 强大的 Mock |
团队协作 | ❌ 个人 | ✅ 有团队版(收费) | ✅ 免费开源 |
更新方式 | 自动(改代码即更新) | 手动 | 手动或从 Swagger 同步 |
使用场景 | 后端写代码时 | 开发调试时 | 团队协作时 |
后端代码 -> Swagger 自动生成 -> 导入 YApi -> YApi 导出 Postman 格式 -> 导入 Postman1.导入knife4j的maven坐标 2.在配置类中加入knife4j相关配置
3.设置静态资源映射,否则接口文档页面无法访问,
静态资源映射就是:告诉服务器"当用户访问某个网址时,直接返回硬盘上的某个文件,不要经过后端代码处理"。

1、Yapi是设计阶段使用的工具,管理和维护接口 2、Swagger在开发阶段使用的框架,帮助后端开发人员做后端的接口测试
Swagger注解:
注解 | 说明 |
|---|---|
@ApI | 用在类上,例如controller,表示对类的说明 |
@ApiModel | 用在类上,例entity、DTo、vo |
@ApiModelProperty | 用在属性上,描述属性信息 |
@ApiOperation | 用在方法上,例如controller的方法,说明方法的用途、作用 |
如果本篇文章对你有帮助,请点赞,关注,收藏,你的支持就是我最大的动力!