12 KiB
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)目录
简介
本文档详细描述了型号管理接口的完整 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
图表来源
数据库查询逻辑
查询支持三种模式:
- 按品牌过滤:
WHERE brand_name = ? ORDER BY name ASC - 按型号模糊匹配:
WHERE name LIKE ? ORDER BY name ASC - 无条件查询: 返回空数组
查询结果按型号名称升序排列。
章节来源
搜索型号列表接口
接口规范
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
图表来源
章节来源
性能考虑
查询优化建议
-
索引优化
- 品牌名称和型号名称已建立唯一索引
- 建议在高频查询字段上建立适当索引
-
分页处理
- 搜索接口支持
count参数限制返回数量 - 建议设置合理的默认值和最大值限制
- 搜索接口支持
-
缓存策略
- 可考虑在 Redis 中缓存热门查询结果
- 对于频繁访问的品牌和型号数据建立缓存层
-
连接池管理
- 合理配置数据库连接池大小
- 监控连接池使用情况避免过度连接
性能监控
系统内置日志中间件,自动记录请求状态、延迟和错误信息:
- 日志级别: 根据 HTTP 状态码自动分级
- 关键指标: 请求路径、方法、延迟、IP 地址
- 错误追踪: 自动记录异常和错误详情
章节来源
故障排除指南
常见问题及解决方案
| 问题类型 | 症状 | 可能原因 | 解决方案 |
|---|---|---|---|
| 数据库连接失败 | HTTP 500 错误 | 数据库配置错误 | 检查 DATABASE_* 环境变量 |
| 搜索服务不可用 | 搜索接口超时 | Meilisearch 服务离线 | 检查 MEILISEARCH_HOST 和 API Key |
| 参数验证失败 | HTTP 400 错误 | 请求参数格式不正确 | 验证必需参数和数据类型 |
| 编码错误 | 响应内容乱码 | Base64 编码失败 | 检查 JSON 序列化和编码过程 |
调试技巧
- 启用详细日志: 设置
GIN_MODE=debug环境变量 - 检查请求ID: 使用
X-Request-ID头部关联日志 - 监控响应时间: 关注日志中的延迟字段
- 验证数据库连接: 确认 MySQL 服务正常运行
章节来源
结论
型号管理接口提供了完整的耳机型号数据检索能力,具有以下特点:
- 双模式查询: 支持精确的品牌过滤和全文搜索
- 灵活的响应格式: 支持标准 JSON 和 Base64 编码响应
- 统一的错误处理: 标准化的错误响应格式便于客户端处理
- 完善的日志记录: 内置详细的请求日志和错误追踪
- 可扩展的架构: 清晰的分层设计便于功能扩展和维护
推荐的最佳实践包括:合理设置搜索参数、利用缓存机制提升性能、监控系统指标、以及建立完善的错误处理流程。这些接口为上层应用提供了稳定可靠的型号数据服务基础。