Files
app-api/.qoder/repowiki/zh/content/API 接口文档/型号管理接口.md
T
2026-05-27 18:07:55 +08:00

12 KiB

型号管理接口

**本文档引用的文件** - [model.go](file://internal/handler/model.go) - [model_list.go](file://internal/handler/model_list.go) - [router.go](file://internal/router/router.go) - [model.go](file://internal/repository/model.go) - [model.go](file://internal/model/model.go) - [meilisearch.go](file://internal/search/meilisearch.go) - [response.go](file://internal/response/response.go) - [base64.go](file://pkg/encode/base64.go) - [model.sql](file://sql/model.sql) - [logger.go](file://internal/middleware/logger.go) - [cors.go](file://internal/middleware/cors.go) - [meilisearch.go](file://internal/config/meilisearch.go) - [README.md](file://README.md)

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构概览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考虑
  8. 故障排除指南
  9. 结论

简介

本文档详细描述了型号管理接口的完整 API 规范,包括获取型号信息和搜索型号列表两个核心接口。该系统采用 Gin 框架构建,支持 MySQL 数据库和 Meilisearch 全文搜索引擎,提供高性能的型号数据检索能力。

系统主要功能:

  • 获取特定品牌或型号的详细信息
  • 基于关键词的型号搜索
  • 支持 Base64 响应编码优化传输
  • 统一的错误处理和日志记录

项目结构

应用程序采用清晰的分层架构设计,主要目录结构如下:

graph TB
subgraph "应用层"
Handler[处理器层]
Router[路由层]
Middleware[中间件层]
end
subgraph "业务逻辑层"
Repository[仓储层]
Search[搜索服务]
end
subgraph "数据访问层"
Database[(MySQL数据库)]
MeiliSearch[(Meilisearch搜索引擎)]
end
subgraph "工具层"
Response[响应格式化]
Encode[编码工具]
end
Handler --> Repository
Handler --> Search
Router --> Handler
Middleware --> Router
Repository --> Database
Search --> MeiliSearch
Handler --> Response
Handler --> Encode

图表来源

章节来源

核心组件

数据模型

型号实体包含以下字段结构:

字段名 类型 描述 是否可空
id int 型号唯一标识符
brandName string 品牌名称
name string 型号名称
form *string 产品形态
rig *string 适用场景
source *string 来源信息
eqKey *string 等效键值
createAt time.Time 创建时间

统一响应格式

所有 API 响应遵循统一的 JSON 结构:

{
  "code": 0,
  "message": "ok",
  "data": {}
}

错误响应格式:

{
  "code": 50000,
  "message": "failed to get model list"
}

章节来源

架构概览

系统采用分层架构,将业务逻辑与数据访问分离:

sequenceDiagram
participant Client as 客户端
participant Router as 路由器
participant Handler as 处理器
participant Repo as 仓储层
participant DB as MySQL数据库
participant Search as 搜索引擎
participant Meili as Meilisearch
Client->>Router : HTTP请求
Router->>Handler : 调用相应处理器
alt 获取型号列表
Handler->>Repo : List(brandName, modelName)
Repo->>DB : 执行SQL查询
DB-->>Repo : 返回查询结果
Repo-->>Handler : 返回型号列表
else 搜索型号列表
Handler->>Search : ModelList(key, count)
Search->>Meili : 执行全文搜索
Meili-->>Search : 返回搜索结果
Search-->>Handler : 返回搜索列表
end
Handler-->>Client : 统一JSON响应

图表来源

详细组件分析

获取型号信息接口

接口规范

HTTP 方法: GET
URL 模式: /audio/getModel
请求参数:

参数名 类型 必填 描述 示例
brandName string 品牌名称过滤条件 sony
modelName string 型号名称模糊匹配 wh-1000xm4
base64Resp boolean 是否返回Base64编码响应 true

响应格式: JSON 数组,每个元素包含完整的型号信息

处理流程

flowchart TD
Start([请求进入]) --> ParseParams["解析查询参数<br/>brandName, modelName, base64Resp"]
ParseParams --> ValidateParams{"验证参数有效性"}
ValidateParams --> |有效| CallRepo["调用仓储层查询"]
ValidateParams --> |无效| ReturnError["返回错误响应"]
CallRepo --> ExecQuery["执行数据库查询"]
ExecQuery --> BuildResult["构建响应数据"]
BuildResult --> CheckBase64{"base64Resp为真?"}
CheckBase64 --> |是| EncodeBase64["Base64编码响应"]
CheckBase64 --> |否| ReturnJSON["直接返回JSON"]
EncodeBase64 --> End([响应客户端])
ReturnJSON --> End
ReturnError --> End

图表来源

数据库查询逻辑

查询支持三种模式:

  1. 按品牌过滤: WHERE brand_name = ? ORDER BY name ASC
  2. 按型号模糊匹配: WHERE name LIKE ? ORDER BY name ASC
  3. 无条件查询: 返回空数组

查询结果按型号名称升序排列。

章节来源

搜索型号列表接口

接口规范

HTTP 方法: GET
URL 模式: /audio/modelList
请求参数:

参数名 类型 必填 描述 默认值
key string 搜索关键词 -
count int 返回结果数量限制 100
base64Resp boolean 是否返回Base64编码响应 true

搜索条件

搜索支持以下字段的全文检索:

  • rig (适用场景)
  • form (产品形态)
  • name (型号名称)
  • brand_name (品牌名称)
  • source (来源信息)
  • eq_key (等效键值)

结果排序规则

搜索结果按照 Meilisearch 的相关性评分排序,最相关的条目排在前面。

处理流程

sequenceDiagram
participant Client as 客户端
participant Handler as ModelListHandler
participant Search as Search.Client
participant Meili as Meilisearch
Client->>Handler : GET /audio/modelList?key=&count=
Handler->>Handler : 解析查询参数
Handler->>Handler : 设置默认count=100
Handler->>Search : ModelList(ctx, key, count)
Search->>Meili : 执行全文搜索
Meili-->>Search : 返回搜索结果
Search-->>Handler : 返回命中列表
Handler->>Handler : 处理Base64响应
Handler-->>Client : 统一JSON响应

图表来源

章节来源

Base64 响应编码

系统支持可选的 Base64 响应编码,用于优化传输效率:

flowchart TD
Start([开始编码]) --> MarshalJSON["序列化为JSON"]
MarshalJSON --> StandardBase64["标准Base64编码"]
StandardBase64 --> CustomMap["应用自定义字符映射"]
CustomMap --> ReturnEncoded["返回编码后的字符串"]
subgraph "字符映射表"
A["ABCDEFGHIJKLMNOPQRSTUVWXYZ"] --> K["KLMPQRSTUVWXYZABC"]
B["abcdefghijklmnopqrstuvwxyz"] --> G["GHdefIJjkNOlmnp"]
C["0123456789+"] --> C1["34501289+/"]
D["="] --> D1["="]
end

图表来源

章节来源

依赖关系分析

组件依赖图

graph TB
subgraph "外部依赖"
Gin[Gin Web框架]
MySQL[MySQL驱动]
Meili[Meilisearch SDK]
Redis[Redis客户端]
Zap[Zap日志]
end
subgraph "内部模块"
Router[路由模块]
Handler[处理器模块]
Repository[仓储模块]
Search[搜索模块]
Response[响应模块]
Encode[编码模块]
Config[配置模块]
end
Router --> Handler
Handler --> Repository
Handler --> Search
Handler --> Response
Handler --> Encode
Repository --> MySQL
Search --> Meili
Handler --> Gin
Handler --> Zap
Config --> Meili

图表来源

错误处理机制

系统采用统一的错误处理策略:

flowchart TD
Request[HTTP请求] --> Handler[处理器处理]
Handler --> TryOperation{尝试操作}
TryOperation --> |成功| Success[返回成功响应]
TryOperation --> |失败| LogError[记录错误日志]
LogError --> ReturnError[返回错误响应]
subgraph "错误类型"
ValidationError[参数验证错误]
DatabaseError[数据库操作错误]
SearchError[搜索操作错误]
EncodeError[编码操作错误]
end
TryOperation --> |失败| ValidationError
TryOperation --> |失败| DatabaseError
TryOperation --> |失败| SearchError
TryOperation --> |失败| EncodeError

图表来源

章节来源

性能考虑

查询优化建议

  1. 索引优化

    • 品牌名称和型号名称已建立唯一索引
    • 建议在高频查询字段上建立适当索引
  2. 分页处理

    • 搜索接口支持 count 参数限制返回数量
    • 建议设置合理的默认值和最大值限制
  3. 缓存策略

    • 可考虑在 Redis 中缓存热门查询结果
    • 对于频繁访问的品牌和型号数据建立缓存层
  4. 连接池管理

    • 合理配置数据库连接池大小
    • 监控连接池使用情况避免过度连接

性能监控

系统内置日志中间件,自动记录请求状态、延迟和错误信息:

  • 日志级别: 根据 HTTP 状态码自动分级
  • 关键指标: 请求路径、方法、延迟、IP 地址
  • 错误追踪: 自动记录异常和错误详情

章节来源

故障排除指南

常见问题及解决方案

问题类型 症状 可能原因 解决方案
数据库连接失败 HTTP 500 错误 数据库配置错误 检查 DATABASE_* 环境变量
搜索服务不可用 搜索接口超时 Meilisearch 服务离线 检查 MEILISEARCH_HOST 和 API Key
参数验证失败 HTTP 400 错误 请求参数格式不正确 验证必需参数和数据类型
编码错误 响应内容乱码 Base64 编码失败 检查 JSON 序列化和编码过程

调试技巧

  1. 启用详细日志: 设置 GIN_MODE=debug 环境变量
  2. 检查请求ID: 使用 X-Request-ID 头部关联日志
  3. 监控响应时间: 关注日志中的延迟字段
  4. 验证数据库连接: 确认 MySQL 服务正常运行

章节来源

结论

型号管理接口提供了完整的耳机型号数据检索能力,具有以下特点:

  1. 双模式查询: 支持精确的品牌过滤和全文搜索
  2. 灵活的响应格式: 支持标准 JSON 和 Base64 编码响应
  3. 统一的错误处理: 标准化的错误响应格式便于客户端处理
  4. 完善的日志记录: 内置详细的请求日志和错误追踪
  5. 可扩展的架构: 清晰的分层设计便于功能扩展和维护

推荐的最佳实践包括:合理设置搜索参数、利用缓存机制提升性能、监控系统指标、以及建立完善的错误处理流程。这些接口为上层应用提供了稳定可靠的型号数据服务基础。