
苍穹外卖 Day01 整理笔记一、课程内容总览Day01 主要学习了 5 个部分软件开发整体介绍苍穹外卖项目介绍开发环境搭建导入接口文档Swagger二、软件开发整体介绍1. 软件开发流程软件开发通常分为 5 个阶段1需求分析产出内容需求规格说明书产品原型作用明确系统做什么明确页面和业务流程2设计设计内容UI设计数据库设计接口设计作用明确页面长什么样明确数据库表结构明确前后端交互方式3编码内容编写项目代码单元测试作用将设计落地实现4测试内容功能测试输出测试报告作用检查系统是否符合需求5上线运维内容部署项目配置服务器环境正式运行维护作用让系统对外提供服务2. 角色分工常见岗位及职责角色对应阶段职责项目经理全阶段任务分配、进度把控产品经理需求分析需求调研、原型设计UI设计师设计页面效果图设计架构师设计技术选型、架构设计开发工程师编码功能实现测试工程师测试测试用例、测试报告运维工程师上线运维环境搭建、项目部署重点开发工程师主要负责编码实现实际项目中一个人可能兼任多个角色3. 软件环境开发中常见三种环境1开发环境 development程序员开发时使用一般在本地或局域网外部用户无法访问2测试环境 testing给测试人员测试使用部署到测试服务器外部用户一般无法访问3生产环境 production正式上线环境给真实用户使用要求稳定、安全、高可用三、苍穹外卖项目介绍1. 项目简介苍穹外卖是一个餐饮企业定制的软件产品分为两部分1管理端使用者餐饮企业内部员工主要功能员工登录/退出员工管理分类管理菜品管理套餐管理订单管理数据统计来单提醒2用户端使用者消费者主要功能微信登录地址管理浏览分类和菜品购物车下单支付历史订单查询2. 产品原型产品原型的作用展示业务功能展示页面布局和交互逻辑不是最终页面效果图项目中有两份原型管理端原型图用户端原型图3. 技术选型项目从 4 层来理解1用户层H5Vue.jsElementUIECharts微信小程序2网关层Nginx作用静态资源部署反向代理负载均衡3应用层SpringBootSpringMVCSpring TaskHttpClientSpring CacheJWT阿里云 OSSSwagger / Knife4jPOIWebSocket4数据层MySQLRedisMyBatisPageHelperSpring Data Redis5工具GitMavenJUnitPostman四、开发环境搭建开发环境包括两部分前端环境后端环境1. 前端环境搭建步骤从资料中找到 nginx放到非中文目录双击nginx.exe启动访问http://localhost:80说明sky目录中存放的是管理端前端资源前端页面通过 nginx 提供访问2. 后端环境搭建2.1 熟悉项目结构后端基于 Maven 构建采用分模块开发。项目模块模块名作用sky-take-out父工程统一管理依赖sky-common公共模块工具类、常量、异常等sky-pojo实体类、DTO、VO 等sky-server后端服务模块Controller、Service、Mapper、配置类等2.2 各模块作用sky-common常见包constant常量类context上下文类enumeration枚举类exception自定义异常jsonJSON处理properties配置属性类result统一返回结果utils工具类sky-pojo常见包entity实体类对应数据库表DTO数据传输对象VO视图对象POJO普通 Java 对象sky-server常见包config配置类controller控制层interceptor拦截器mapper持久层接口service业务层SkyApplication启动类2.3 Git 版本控制主要流程1创建本地仓库在 IDEA 中初始化 Git 仓库2创建远程仓库在 Gitee 新建仓库3推送代码到远程仓库步骤先提交到本地仓库添加远程仓库地址push 推送注意要忽略不需要提交的文件2.4 数据库环境搭建步骤找到sky.sql直接执行 SQL 文件自动创建数据库和表结果共创建 11 张表表名中文名employee员工表category分类表dish菜品表dish_flavor菜品口味表setmeal套餐表setmeal_dish套餐菜品关系表user用户表address_book地址表shopping_cart购物车表orders订单表order_detail订单明细表2.5 前后端联调初始工程已经实现了登录功能可以直接联调测试。登录功能调用链Controller 层EmployeeController接收前端登录请求调用 service 查询员工信息登录成功后生成 JWT返回EmployeeLoginVOService 层EmployeeServiceImpl主要逻辑根据用户名查询员工判断员工是否存在判断密码是否正确判断账号是否被禁用返回员工对象Mapper 层EmployeeMapper通过用户名查询员工信息2.6 nginx 反向代理和负载均衡1为什么前端能访问到后端前端请求地址http://localhost/api/employee/login后端真实地址http://localhost:8080/admin/employee/login中间靠nginx 反向代理实现转发。2nginx 反向代理作用提高访问速度隐藏后端服务地址保证后端安全为负载均衡做准备核心配置location /api/{proxy_pass http://localhost:8080/admin/;}含义访问/api/开头的请求nginx 转发到http://localhost:8080/admin/所以/api/employee/login最终会被转到/admin/employee/login3nginx 负载均衡当后端部署成集群时nginx 可把请求分配到多台服务器。基本配置upstream webservers{server 192.168.100.128:8080;server 192.168.100.129:8080;}location /api/{proxy_pass http://webservers/admin;}常见负载均衡策略轮询默认weight按权重分配ip_hash按客户端 IP 分配least_conn优先给连接数少的服务器url_hash相同 URL 到同一台服务器fair按响应时间分配2.7 完善登录功能问题员工表中的密码是明文存储不安全。解决方案将密码改为密文存储使用MD5进行加密修改点1数据库中密码改成 MD5 密文2Java 代码中登录时将用户输入密码先做 MD5 再比较示例逻辑password DigestUtils.md5DigestAsHex(password.getBytes());if (!password.equals(employee.getPassword())) {throw new PasswordErrorException(MessageConstant.PASSWORD_ERROR);}目的提升账号密码安全性五、导入接口文档1. 前后端分离开发流程标准流程先定义接口前后端并行开发前后端联调提交测试接口文档内容包括请求路径请求方式请求参数返回参数2. 导入 YApi步骤找到课程提供的接口 JSON 文件访问 YApi 平台创建两个项目管理端接口项目用户端接口项目分别导入对应 JSON 文件作用管理和维护接口定义方便前后端协作开发六、Swagger / Knife4j1. Swagger 作用Swagger 是生成和管理 RESTful 接口文档的工具。主要作用自动生成在线接口文档方便前后端协作可直接测试接口实际开发中一般使用Knife4j它是 Swagger 的增强版2. 使用步骤1引入依赖在pom.xml中加入dependencygroupIdcom.github.xiaoymin/groupIdartifactIdknife4j-spring-boot-starter/artifactId/dependency2配置 Docket在WebMvcConfiguration.java中配置Beanpublic Docket docket() {ApiInfo apiInfo new ApiInfoBuilder().title(苍穹外卖项目接口文档).version(2.0).description(苍穹外卖项目接口文档).build();return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo).select().apis(RequestHandlerSelectors.basePackage(com.sky.controller)).paths(PathSelectors.any()).build();}3配置静态资源映射否则无法访问文档页面protected void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler(/doc.html).addResourceLocations(classpath:/META-INF/resources/);registry.addResourceHandler(/webjars/**).addResourceLocations(classpath:/META-INF/resources/webjars/);}4访问测试访问地址http://localhost:8080/doc.html3. Swagger 常用注解注解作用Api标注在类上说明类作用ApiModel标注在类上说明数据模型ApiModelProperty标注在属性上说明属性含义ApiOperation标注在方法上说明接口用途4. 示例说明DTO 示例EmployeeLoginDTO描述员工登录时传递的数据模型包含usernamepasswordVO 示例EmployeeLoginVO描述员工登录返回的数据格式包含iduserNamenametokenController 示例EmployeeControllerApi(tags 员工相关接口)ApiOperation(员工登录)ApiOperation(员工退出)这样生成出来的接口文档更清晰、更易读。七、YApi 和 Swagger 的区别这是一个很重要的面试点。YApi已经是新的网址可以自行搜索或者直接使用Swagger用于设计阶段管理和维护接口更偏向团队协作和接口约定Swagger / Knife4j用于开发阶段根据代码自动生成文档方便开发人员调试接口结论两者不是替代关系而是互补关系。八、Day01 核心重点总结这节课最需要掌握的内容1. 软件开发流程需求分析设计编码测试上线运维2. 苍穹外卖项目结构管理端用户端技术选型模块划分3. 后端工程模块sky-commonsky-pojosky-server4. 数据库执行sky.sql了解 11 张表的作用5. 登录功能Controller / Service / Mapper 三层调用JWT 令牌生成MD5 密码加密6. nginx反向代理负载均衡常见策略7. 前后端分离先定义接口再并行开发然后联调测试8. Swagger / Knife4j自动生成接口文档常用注解与 YApi 的区别九、适合背诵的简版1. 软件开发的五个阶段需求分析、设计、编码、测试、上线运维。2. 三种环境开发环境、测试环境、生产环境。3. 苍穹外卖分为哪两端管理端和用户端。4. 后端工程有哪些模块sky-common、sky-pojo、sky-server另有父工程 sky-take-out。5. 登录功能的执行流程Controller 接收请求 → Service 处理业务 → Mapper 查询数据库 → 登录成功后生成 JWT 返回前端。6. 为什么使用 nginx做反向代理、提高访问速度、隐藏后端地址、实现负载均衡。7. 为什么要对密码做 MD5避免明文存储提高安全性。8. YApi 和 Swagger 区别YApi 用于接口设计和管理Swagger/Knife4j 用于开发阶段自动生成接口文档和测试接口