营销项目--11. 抽奖API接口实现
新增big-market-api
模块,实现对外的接口,3个抽奖服务。
调整抽奖策略领域实现方式,满足接口单一职责
Trigger模块:专门用于提供触发操作,包括:HTTP调用,RPC(Dubbo)调用,定时任务,MQ监听等动作。
api模块定义出接口信息和出入参对象
trigger实现3个接口:
- 装配策略接口:初始化抽奖信息到Redis缓存中
- 查询奖品列表: 查询抽奖奖品列表信息给前端
- 随机抽奖接口:随机抽奖{奖品id,奖品编号}
开发流程
增加api Module
![[Pasted image 20241106095018.png]]1. 修改pom
2. 定义抽奖服务接口 IRaffleService: strategyArmory, queryRaffleAwardList,randomRaffle
3. 新增types-model-response对象 专门用于返回对象的
4. 新增api-dto-RaffleAwardListRequestDTO 抽奖奖品列表的请求对象。 RaffleAwardListResponseDTO抽奖奖品列表的返回对象
RaffleRequestDTO抽奖请求参数
trigger层实现api接口
增加IRaffleController用于实现api接口,增加的@CrossOrigin跨域接口和@RequestMapping都在app-resources-application-dev.yaml中进行配置
开发策略装配接口
开发query奖品列表接口
- 在domain层新增IRaffleAward查询奖品列表的接
- StrategyAwardEntity做一些补充字段,用到这个实体的填充build方法,mapper也要改一下。
- 更改抽象类和子类。抽象类中只实现
IRaffleStrategy
,子类中实现IRaffleAward, IRaffleStock
- 在trigger层中实现query奖品列表接口
开发随机抽奖奖品接口
- 更改一下RaffleAward实体对象中的一些字段
- 在抽象类中build RaffleAward实体的方法重构一下,新增buildRaffleAwardEntity方法
- 新增queryStrategyAwardEntity方法,仓储查询动作
修改DecisionTreeEnigne的nextNode返回值
修改StrategyRepository的 getRateRange方法
测试
- apipost增加接口信息
34分钟
相关知识
@ResetController注释
@RestController是@Controller和@ResponseBody的组合注解,用于构建RESTful api
@RestController返回的数据会被自动序列化为JSON或XML格式,适用于构建返回JSON数据的RESTful服务
@Controller通常用于MVC应用程序,返回的是视图名称,而不是直接返回数据
前后端跨域请求 @CrossOrigin注解
@CrossOrigin
是 Spring 提供的一个注解,用于允许跨域请求。跨域请求在 Web 应用中很常见,尤其是前后端分离的架构中,前端应用和后端 API 部署在不同的域名或端口下时,需要通过跨域配置来允许前端访问后端资源。
@RequestMapping注解
类级别的 @RequestMapping
@RequestMapping("/api/v1/raffle/")
- 这个注解位于
RaffleController
类上,表示所有定义在该类中的接口请求路径都会以/api/v1/raffle/
开头。 - 这意味着类中的所有方法的 URL 地址都会以此基础路径作为前缀。
方法级别的 @RequestMapping
@RequestMapping(value = "strategy_armory", method = RequestMethod.GET)
- 在
strategyArmory
方法上,@RequestMapping
指定了value
和method
参数。value = "strategy_armory"
:指定了请求路径为"strategy_armory"
,所以方法的完整路径为/api/v1/raffle/strategy_armory
。method = RequestMethod.GET
:指定了请求方法为GET
,表示只能通过 GET 请求来访问此方法。
工程模块的分层定义 api, trigger, domain
api模块
定义对外接口,项目暴露给前端或者其他第三方调用的入口层。前端根据不同业务需求调用后端服务。规定了客户端可以调用的服务方法和接口格式
trigger层
trigger层实现api接口的具体功能用于接收和处理外部请求,实现API模块定义的接口,通过依赖注入调用Domain层的业务逻辑,将抽奖,奖品查询功能封装为对外的接口方法
domain层
负责核心业务逻辑和数据处理,将业务逻辑封装在domain层有助于实现代码逻辑复用,降低模块耦合,更换底层实现也不会影响业务逻辑