苍穹外卖day-01
后端环境搭建
创建git仓库
提交代码
创建gitee远程仓库
开始连接远程仓库
运行sql文件,创建数据库。这里选取的可视化工具是navicat
编译一下项目
运行项目
登录的账号和密码在数据库中的emploee表中
退出前端界面登录后再重新登录,可以从后台清晰看到前端提交过来的数据
在controller层,对着接口点方法的方法上按着ctrl和鼠标左键,会进入service层
对着方法ctrl+alt+b不按鼠标,会进入impl层
此处我们进入impl层
问题:前端发送的请求是如何请求到后端服务器的?
解答:nginx反向代理,将前端发送的动态请求由nginx转发到后端服务器
整个执行过程:
nginx反向代理的好处:
- 提高访问速度
- 进行负载均衡:把大量的请求按照我们指定的方式均衡分配给集群中的每台服务器
- 保证后端服务器的安全
nginx反向代理的配置方式:
负载均衡:
nginx负载均衡策略:
**nginx 负载均衡策略:**
| **名称** | **说明** |
| ---------- | ------------------------------------------------------ |
| 轮询 | 默认方式 |
| weight | 权重方式,默认为1,权重越高,被分配的客户端请求就越多 |
| ip_hash | 依据ip分配方式,这样每个访客可以固定访问一个后端服务 |
| least_conn | 依据最少连接方式,把请求优先分配给连接数少的后端服务 |
| url_hash | 依据url分配方式,这样相同的url会被分配到同一个后端服务 |
| fair | 依据响应时间方式,响应时间短的服务将会被优先分配 |
具体配置方式:
**轮询:**
```nginx
upstream webservers{
server 192.168.100.128:8080;
server 192.168.100.129:8080;
}
```
**weight:**
```nginx
upstream webservers{
server 192.168.100.128:8080 weight=90;
server 192.168.100.129:8080 weight=10;
}
```
**ip_hash:**
```nginx
upstream webservers{
ip_hash;
server 192.168.100.128:8080;
server 192.168.100.129:8080;
}
```
**least_conn:**
```nginx
upstream webservers{
least_conn;
server 192.168.100.128:8080;
server 192.168.100.129:8080;
}
```
**url_hash:**
```nginx
upstream webservers{
hash &request_uri;
server 192.168.100.128:8080;
server 192.168.100.129:8080;
}
```
**fair:**
```nginx
upstream webservers{
server 192.168.100.128:8080;
server 192.168.100.129:8080;
fair;
}
```
完善登录功能:
问题:员工表的密码是明文存储,考虑对密码进行加密,提高数据安全性
解决思路:使用MD5加密方式对明文密码进行加密
在emploeeServiceImpl文件中,使用springboot中的DigestUtils
在Yapi分别创建用户和管理员接口项目,分别导入相关json文件
后端API接口文档swagger使用流程较为繁琐,这里引入Knife4j框架,写入相关依赖
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>3.0.2</version>
</dependency>
在配置类 WebMvcConfiguration 中加入knife4j相关配置
/**
* 通过knife4j生成接口文档
* @return
*/
@Bean
public Docket docket() {
ApiInfo apiInfo = new ApiInfoBuilder()
.title("苍穹外卖项目接口文档")
.version("2.0")
.description("苍穹外卖项目接口文档")
.build();
Docket docket = new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo)
.select()
.apis(RequestHandlerSelectors.basePackage("com.sky.controller"))
.paths(PathSelectors.any())
.build();
return docket;
}
设置静态资源映射,否则接口文档页面无法访问
/**
* 设置静态资源映射
* @param registry
*/
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
访问网址 http://localhost:8080/doc.html 即可查看接口文档
Q:通过 Swagger 就可以生成接口文档,那么是不是就不需要 Yapi 了?
- Yapi 是设计阶段使用的工具,管理和维护接口
- Swagger 在开发阶段使用的框架,帮助后端开发人员做后端的接口测试
通过注解可以控制生成的接口文档,使接口文档拥有更好的可读性,常用注解如下:
| **注解** | **说明** |
| ----------------- | ------------------------------------------------------ |
| @Api | 用在类上,例如Controller,表示对类的说明 |
| @ApiModel | 用在类上,例如entity、DTO、VO |
| @ApiModelProperty | 用在属性上,描述属性信息 |
| @ApiOperation | 用在方法上,例如Controller的方法,说明方法的用途、作用 |