4.4 KiB
4.4 KiB
API处理器架构说明
概述
本目录实现了基于依赖注入容器的API处理器架构,支持灵活的依赖管理和组合调用模式。
架构模式
1. 依赖注入容器模式
ProcessorDependencies
type ProcessorDependencies struct {
WestDexService *westdex.WestDexService
YushanService *yushan.YushanService
Validator interfaces.RequestValidator
}
优势:
- 统一的依赖管理
- 类型安全的依赖注入
- 易于测试和mock
- 支持未来扩展新的服务
处理器函数签名
type ProcessorFunc func(ctx context.Context, params []byte, deps *ProcessorDependencies) ([]byte, error)
2. 组合处理器模式
CompositeProcessor
专门用于处理组合包(COMB系列)的处理器,支持:
- 动态注册其他处理器
- 批量调用多个处理器
- 结果组合和格式化
type CompositeProcessor struct {
processors map[string]ProcessorFunc
deps *ProcessorDependencies
}
目录结构
processors/
├── dependencies.go # 依赖容器定义
├── comb/
│ ├── comb_processor.go # 组合处理器基类
│ └── comb298y_processor.go # COMB298Y组合处理器
├── flxg/ # FLXG系列处理器
├── jrzq/ # JRZQ系列处理器
├── qygl/ # QYGL系列处理器
├── yysy/ # YYSY系列处理器
└── ivyz/ # IVYZ系列处理器
服务分配策略
WestDexService
- FLXG系列:使用WestDexService
- JRZQ系列:使用WestDexService
- IVYZ系列:使用WestDexService
YushanService
- QYGL系列:使用YushanService
- YYSY系列:使用YushanService
组合包(COMB)
- 调用多个其他处理器
- 组合结果并返回统一格式
使用示例
普通处理器
func ProcessFLXG0V3Bequest(ctx context.Context, params []byte, deps *ProcessorDependencies) ([]byte, error) {
// 参数验证
var paramsDto dto.FLXG0V3BequestReq
if err := json.Unmarshal(params, ¶msDto); err != nil {
return nil, fmt.Errorf("参数校验不正确: 解密后的数据格式错误")
}
if err := deps.Validator.ValidateStruct(paramsDto); err != nil {
return nil, fmt.Errorf("参数校验不正确: %s", err.Error())
}
// 调用服务
reqData := map[string]interface{}{
"name": paramsDto.Name,
"idCard": paramsDto.IDCard,
"mobile": paramsDto.Mobile,
}
respBytes, err := deps.WestDexService.CallAPI("FLXG0V3B", reqData)
if err != nil {
return nil, fmt.Errorf("调用外部服务失败: %s", err.Error())
}
return respBytes, nil
}
组合处理器
func ProcessCOMB298YRequest(ctx context.Context, params []byte, deps *ProcessorDependencies) ([]byte, error) {
// 创建组合处理器
compositeProcessor := NewCompositeProcessor(deps)
// 注册需要调用的处理器
compositeProcessor.RegisterProcessor("FLXG0V3B", flxg.ProcessFLXG0V3Bequest)
compositeProcessor.RegisterProcessor("JRZQ8203", jrzq.ProcessJRZQ8203Request)
// 调用并组合结果
results := make(map[string]interface{})
flxgResult, err := compositeProcessor.CallProcessor(ctx, "FLXG0V3B", params)
if err != nil {
return nil, fmt.Errorf("调用FLXG0V3B处理器失败: %s", err.Error())
}
results["flxg0v3b"] = string(flxgResult)
// 返回组合结果
return compositeProcessor.CombineResults(results)
}
扩展指南
添加新的服务依赖
- 在
ProcessorDependencies中添加新字段 - 更新
NewProcessorDependencies构造函数 - 在
ApiRequestService中注入新服务
添加新的处理器
- 在对应目录下创建新的处理器文件
- 实现
ProcessorFunc接口 - 在
RequestProcessors映射中注册
添加新的组合包
- 在
comb/目录下创建新的组合处理器 - 使用
CompositeProcessor基类 - 注册需要调用的处理器并组合结果
优势
- 解耦:处理器与具体服务实现解耦
- 可测试:易于进行单元测试和集成测试
- 可扩展:支持添加新的服务和处理器
- 类型安全:编译时检查依赖关系
- 组合支持:灵活的组合调用模式
- 维护性:清晰的代码结构和职责分离