一、关于项目
项目简介:
《苍穹外卖》项目的定位是一款为餐饮企业定制的软件产品。该项目是一个在线外卖点餐订购系统,顾客可以通过网站或者手机App订购点餐。
开发环境搭建主要包含前端环境和后端环境两部分。作为服务端开发工程师, 此课程学习的重心应该放在后端的业务代码上, 前端的页面只需要导入资料中的nginx即可。
软件开发流程:
功能架构:
管理端:
- 员工管理:管理员可以在系统后台对员工信息进行管理,包含查询、新增、编辑、禁用等功能
- 分类管理:主要对当前餐厅经营的 菜品分类 或 套餐分类 进行管理维护, 包含查询、新增、修改、删除等功能
- 菜品管理:主要维护各个分类下的菜品信息,包含查询、新增、修改、删除、启售、停售等功能
- 套餐管理:主要维护当前餐厅中的套餐信息,包含查询、新增、修改、删除、启售、停售等功能
- 订单管理:主要维护用户在移动端下的订单信息,包含查询、取消、派送、完成,以及订单报表下载等功能
- 工作台:展示各种操作界面
- 数据统计:主要完成对餐厅的各类数据统计,如营业额、用户数量、订单等
用户端
- 微信登录:用户端微信用户生成jwt令牌相关配置
- 商品浏览:在点餐界面需要展示出菜品分类/套餐分类, 并根据当前选择的分类加载其中的菜品信息,供用户查询选择
- 购物车:用户选中的菜品就会加入用户的购物车,主要包含 查询购物车、加入购物车、删除购物车、清空购物车等功能
- 微信支付:用户选完菜品/套餐后,可以对购物车菜品进行结算支付,这时就需要进行订单的支付
- 历史订单:可在历史订单中查看自己以往的订购情况
- 地址管理:在个人中心页面中会展示当前用户的基本信息,用户可以管理收货地址,也可以查询历史订单数据
- 用户催单:支付后商家久未接单,可以点击催单选项,提醒商家接单
二、项目亮点
1.Nginx反向代理和负载均衡
Nginx是一款轻量级的web服务器、反向代理服务器、电子邮件代理服务器,特点是占有内存少、并发能力强。Nginx反向代理就是将前端发送的动态请求由Nginx转发到后端服务器,负载均衡从本质上来说也是基于反向代理来实现的,最终都是转发请求。
Nginx反向代理的好处:
- 提高访问速度:因为nginx本身可以进行缓存,如果访问的同一接口,并且做了数据缓存,nginx就直接可把数据返回,不需要真正地访问服务端,从而提高访问速度。
- 进行负载均衡:所谓负载均衡,就是把大量的请求按照我们指定的方式均衡的分配给集群中的每台服务器。
- 保证后端服务安全:因为一般后台服务地址不会暴露,所以使用浏览器不能直接访问,可以把nginx作为请求访问的入口,请求到达nginx后转发到具体的服务中,从而保证后端服务的安全。
2.Token模式(JWT)
JWT是JSON Web Token的缩写,即JSON Web令牌,JWT是Auth0提出的通过对JSON进行加密签名来实现授权验证的方案,就是登陆成功后将相关信息组成json对象,然后对这个对象进行某中方式的加密,返回给客户端,客户端在下次请求时带上这个token,服务端再收到请求时校验token合法性,其实也就是在校验请求的合法性。
使用基于 Token 的身份验证方法,大概的流程是这样的:
) 客户端使用用户名跟密码请求登录
2) 服务端收到请求,去验证用户名与密码
3) 验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
4) 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
5) 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
6) 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据。
总的来说就是客户端在首次登陆以后,服务端再次接收http请求的时候,就只认token了,请求只要每次把token带上就行了,服务器端会拦截所有的请求,然后校验token的合法性,合法就放行,不合法就返回鉴权失败。
3.MD5码加密
当我们需要保存某些密码信息以用于身份确认时,如果直接将密码信息以明码方式保存在数据库中,不使用任何保密措施,系统管理员就很容易能得到原来的密码信息,这些信息一旦泄露, 密码也很容易被破译。为了增加安全性,有必要对数据库中需要保密的信息进行加密,MD5算法可以很好地解决这个问题,因为它可以将任意长度的输入串经过计算得到固定长度的输出,而且只有在明文相同的情况下,才能等到相同的密文,并且这个算法是不可逆的,即便得到了加密以后的密文,也不可能通过解密算法反算出明文。
4.导入接口文档
第一步:定义接口,确定接口的路径、请求方式、传入参数、返回参数。
第二步:前端开发人员和后端开发人员并行开发,同时,也可自测。
第三步:前后端人员进行连调测试。
第四步:提交给测试人员进行最终测试。
操作步骤:
1). 从资料中找到项目接口文件
2). 导入到YApi平台 在YApi平台创建出两个项目,选择苍穹外卖-管理端接口.json导入
5.Swagger和knife4j
Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务它的主要作用是:使得前后端分离开发更加方便,接口的文档在线自动生成,knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案。
搭建Swagger并引入Swagger的依赖包
<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> </dependency>
引入knife4j
的依赖
<dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> </dependency>
加入注解代码
6.Redis缓存数据
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
7.cache缓存框架
1、SpringCache是Spring提供的一个缓存框架,在Spring3.1版本开始支持将缓存添加到现有的spring应用程序中,在4.1开始,缓存已支持JSR-107注释和更多自定义的选项。
2、Spring Cache利用了AOP,实现了基于注解的缓存功能,并且进行了合理的抽象,业务代码不用关心底层是使用了什么缓存框架,只需要简单地加一个注解,就能实现缓存功能了,做到了对代码侵入性做小。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency>
1)EnableCaching
标注于SpringBoot应用启动类上,添加此注解表示开启Spring Cache缓存;移除表示关闭缓存。如果在全局配置文件中添加如下配置,即使在启动类上标注EnableCaching注解,Spring Cache缓存然后是关闭状态。
(1)Cacheable
添加缓存的核心注解,分两种情况:一是对应key值未有缓存数据,先执行方法,然后根据condition和unless条件决定是否添加缓存;二是对应key值已有缓存,不执行方法体,直接返回数据。
8.定时任务Spring Task
Spring Task是Spring 3.0后推出的定时任务模块,职责是按周期后台自动执行任务。Spring Task可利用Cron表达式实现灵活的定时处理。只需要在配置类中添加一个@EnableScheduling注解即可开启SpringTask的定时任务能力。
9.webSocket全双工通信
WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。
WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
(百度百科-验证)
10.Apache ECharts
Apache ECharts 是一款基于 Javascript 的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。 - 官网地址:https://echarts.apache.org/zh/index.html