# API 封装使用说明
本项目已将所有API调用封装为统一的服务模块,便于维护和使用。
## 目录结构
```
src/api/
├── index.js # 统一入口文件
├── config.js # API配置和常量
├── request.js # Axios封装和拦截器
├── modules/ # 基础API模块
│ ├── module.js # T4模块数据接口
│ ├── proxy.js # 模块代理接口
│ └── parse.js # 解析接口
├── services/ # 业务服务层
│ ├── index.js # 服务统一入口
│ ├── video.js # 视频相关业务逻辑
│ └── site.js # 站点管理业务逻辑
├── utils/ # 工具函数
│ └── index.js # 数据处理和验证工具
└── types/ # 数据类型定义
└── index.js # 类型定义和工厂函数
```
## 快速开始
### 1. 导入服务
```javascript
// 导入所有服务
import { videoService, siteService } from '@/api/services'
// 或者单独导入
import { videoService } from '@/api/services/video'
import { siteService } from '@/api/services/site'
```
### 2. 站点管理
```javascript
// 获取所有站点
const sites = siteService.getAllSites()
// 设置当前站点
siteService.setCurrentSite('site_key')
// 获取当前站点
const currentSite = siteService.getCurrentSite()
// 添加新站点
siteService.addSite({
key: 'new_site',
name: '新站点',
api: 'https://api.example.com',
ext: 'some_extension'
})
```
### 3. 视频数据获取
```javascript
// 获取推荐视频
const homeData = await videoService.getRecommendVideos('site_key', {
extend: 'extension_data'
})
// 获取分类视频
const categoryData = await videoService.getCategoryVideos('site_key', {
t: 'category_id',
pg: 1,
extend: 'extension_data'
})
// 搜索视频
const searchResult = await videoService.searchVideo('site_key', {
wd: '搜索关键词',
pg: 1,
extend: 'extension_data'
})
// 获取视频详情
const videoDetail = await videoService.getVideoDetails('site_key', {
ids: 'video_id',
extend: 'extension_data'
})
// 获取播放地址
const playData = await videoService.getPlayUrl('site_key', {
play: 'play_data',
extend: 'extension_data'
})
```
### 4. 视频解析
```javascript
// 解析视频URL
const parseResult = await videoService.parseVideoUrl('jx_key', {
url: 'video_url'
})
```
## 在Vue组件中使用
### 基本用法
```vue
```
### 错误处理
所有API调用都包含了错误处理,会返回统一的错误格式:
```javascript
try {
const result = await videoService.getRecommendVideos('site_key')
} catch (error) {
// error.code - 错误代码
// error.message - 错误信息
// error.data - 额外错误数据
console.error('API调用失败:', error.message)
}
```
### 缓存机制
视频服务包含5分钟的缓存机制,相同的请求在5分钟内会返回缓存结果,提高性能。
## 配置说明
### API配置 (config.js)
```javascript
// 基础配置
export const BASE_URL = process.env.VUE_APP_API_BASE_URL || ''
export const TIMEOUT = 10000
// API路径
export const API_PATHS = {
MODULE: '/api', // T4模块接口
PROXY: '/proxy', // 代理接口
PARSE: '/parse' // 解析接口
}
```
### 请求拦截器
请求会自动添加:
- Authorization token(如果存在)
- Cache-Control: no-cache
- 统一的错误处理
## 迁移指南
### 从旧的req方式迁移
**旧方式:**
```javascript
import req from '@/utils/req'
// 获取数据
const response = await req.get('/home')
const data = response.data
```
**新方式:**
```javascript
import { videoService, siteService } from '@/api/services'
// 获取数据
const currentSite = siteService.getCurrentSite()
const data = await videoService.getRecommendVideos(currentSite.key, {
extend: currentSite.ext
})
```
### 主要变化
1. **统一的服务接口**:不再直接调用HTTP方法,而是调用语义化的业务方法
2. **自动错误处理**:统一的错误格式和处理机制
3. **数据格式化**:返回的数据已经过格式化处理
4. **缓存支持**:自动缓存机制提高性能
5. **类型安全**:完整的类型定义和验证
## 注意事项
1. 所有API调用都需要先设置当前站点
2. 确保传入正确的extend参数
3. 处理好异步操作的错误情况
4. 合理使用缓存机制,避免频繁请求