akshare_web 提供完整的 RESTful API 用于管理金融数据采集任务。所有 API 请求和响应使用 JSON 格式。
Base URL: http://localhost:8000
API 前缀: /api
大多数端点需要在请求头中携带 JWT 访问令牌:
Authorization: Bearer <access_token>
通过登录或注册端点获取访问令牌。
注册新用户。
请求体:
{
"username": "string",
"email": "user@example.com",
"password": "string",
"password_confirm": "string"
}响应 (201):
{
"code": 0,
"message": "success",
"data": {
"access_token": "string",
"refresh_token": "string",
"token_type": "bearer",
"expires_in": 1800
}
}用户登录。
请求体:
{
"username": "string",
"password": "string"
}响应 (200):
{
"code": 0,
"message": "success",
"data": {
"access_token": "string",
"refresh_token": "string",
"token_type": "bearer",
"expires_in": 1800
}
}用户登出。
响应 (200):
{
"code": 0,
"message": "success"
}刷新访问令牌。
请求体:
{
"refresh_token": "string"
}响应 (200):
{
"code": 0,
"message": "success",
"data": {
"access_token": "string",
"token_type": "bearer",
"expires_in": 1800
}
}获取当前用户信息。
响应 (200):
{
"code": 0,
"message": "success",
"data": {
"id": 1,
"username": "string",
"email": "user@example.com",
"role": "user",
"is_active": true
}
}获取用户列表。
查询参数:
page(int, 默认: 1) - 页码page_size(int, 默认: 20) - 每页数量username(string, 可选) - 用户名过滤email(string, 可选) - 邮箱过滤role(string, 可选) - 角色过滤 (user/admin)
响应 (200):
{
"code": 0,
"message": "success",
"data": {
"items": [...],
"total": 100,
"page": 1,
"page_size": 20
}
}获取用户详情。
响应 (200):
{
"code": 0,
"message": "success",
"data": {
"id": 1,
"username": "string",
"email": "user@example.com",
"role": "user",
"is_active": true,
"created_at": "2024-01-01T00:00:00Z"
}
}更新用户信息。
请求体:
{
"email": "newemail@example.com",
"role": "admin",
"is_active": true
}响应 (200):
{
"code": 0,
"message": "success",
"data": { /* 用户对象 */ }
}删除用户。
响应 (200):
{
"code": 0,
"message": "success"
}重置用户密码。
请求体:
{
"new_password": "string"
}响应 (200):
{
"code": 0,
"message": "success"
}获取数据脚本列表。
查询参数:
page(int, 默认: 1) - 页码page_size(int, 默认: 20) - 每页数量category(string, 可选) - 分类过滤is_active(boolean, 可选) - 是否激活
响应 (200):
{
"code": 0,
"message": "success",
"data": {
"items": [
{
"id": 1,
"script_id": "stock_zh_a_hist",
"script_name": "A股历史行情",
"category": "stocks",
"frequency": "daily",
"is_active": true,
"description": "获取A股日线数据"
}
],
"total": 50,
"page": 1,
"page_size": 20
}
}获取脚本分类列表。
响应 (200):
{
"code": 0,
"message": "success",
"data": ["stocks", "funds", "futures", "indexes", "options", "bonds"]
}获取脚本详情。
响应 (200):
{
"code": 0,
"message": "success",
"data": {
"id": 1,
"script_id": "stock_zh_a_hist",
"script_name": "A股历史行情",
"category": "stocks",
"module_path": "app.data_fetch.scripts.stocks.daily.stock_zh_a_hist",
"parameters": [
{
"name": "symbol",
"type": "string",
"required": true,
"description": "股票代码"
}
]
}
}扫描并注册新的数据脚本(管理员)。
响应 (200):
{
"code": 0,
"message": "success",
"data": {
"scanned": 10,
"registered": 5,
"updated": 3
}
}测试脚本执行。
请求体:
{
"parameters": {
"symbol": "000001"
}
}响应 (200):
{
"code": 0,
"message": "success",
"data": {
"status": "success",
"rows_affected": 100,
"execution_time": 1.23
}
}切换脚本激活状态。
响应 (200):
{
"code": 0,
"message": "success",
"data": {
"id": 1,
"is_active": false
}
}获取定时任务列表。
查询参数:
page(int, 默认: 1) - 页码page_size(int, 默认: 20) - 每页数量is_active(boolean, 可选) - 是否激活
响应 (200):
{
"code": 0,
"message": "success",
"data": {
"items": [
{
"id": 1,
"name": "每日A股数据",
"script_id": "stock_zh_a_hist",
"schedule_type": "cron",
"schedule_expression": "0 15 * * 1-5",
"is_active": true,
"last_execution_at": "2024-01-01T15:00:00Z",
"next_execution_at": "2024-01-02T15:00:00Z"
}
],
"total": 10,
"page": 1,
"page_size": 20
}
}创建定时任务。
请求体:
{
"name": "每日A股数据",
"script_id": "stock_zh_a_hist",
"schedule_type": "cron",
"schedule_expression": "0 15 * * 1-5",
"parameters": {
"symbol": "000001"
},
"retry_on_failure": true,
"max_retries": 3
}响应 (201):
{
"code": 0,
"message": "success",
"data": { /* 任务对象 */ }
}获取任务详情。
响应 (200):
{
"code": 0,
"message": "success",
"data": {
"id": 1,
"name": "每日A股数据",
"script_id": "stock_zh_a_hist",
"schedule_type": "cron",
"schedule_expression": "0 15 * * 1-5",
"is_active": true,
"retry_on_failure": true,
"max_retries": 3,
"created_at": "2024-01-01T00:00:00Z"
}
}更新任务。
响应 (200):
{
"code": 0,
"message": "success",
"data": { /* 更新后的任务对象 */ }
}删除任务。
响应 (200):
{
"code": 0,
"message": "success"
}手动触发任务执行。
响应 (200):
{
"code": 0,
"message": "success",
"data": {
"execution_id": "exec_123",
"status": "pending"
}
}暂停任务。
响应 (200):
{
"code": 0,
"message": "success"
}恢复任务。
响应 (200):
{
"code": 0,
"message": "success"
}获取任务执行记录。
查询参数:
page(int, 默认: 1) - 页码page_size(int, 默认: 20) - 每页数量status(string, 可选) - 状态过滤
响应 (200):
{
"code": 0,
"message": "success",
"data": {
"items": [ /* 执行记录数组 */ ],
"total": 100
}
}获取执行记录列表。
查询参数:
page(int, 默认: 1) - 页码page_size(int, 默认: 20) - 每页数量task_id(int, 可选) - 任务ID过滤status(string, 可选) - 状态过滤
响应 (200):
{
"code": 0,
"message": "success",
"data": {
"items": [
{
"execution_id": "exec_123",
"task_id": 1,
"status": "completed",
"start_time": "2024-01-01T15:00:00Z",
"end_time": "2024-01-01T15:01:00Z",
"rows_affected": 100,
"error_message": null
}
],
"total": 500,
"page": 1,
"page_size": 20
}
}获取执行详情。
响应 (200):
{
"code": 0,
"message": "success",
"data": {
"execution_id": "exec_123",
"task_id": 1,
"status": "completed",
"start_time": "2024-01-01T15:00:00Z",
"end_time": "2024-01-01T15:01:00Z",
"rows_before": 1000,
"rows_after": 1100,
"rows_affected": 100,
"result": {
"message": "success"
},
"error_message": null,
"retry_count": 0,
"triggered_by": "scheduler"
}
}取消执行。
响应 (200):
{
"code": 0,
"message": "success"
}重试执行。
响应 (200):
{
"code": 0,
"message": "success",
"data": {
"execution_id": "exec_124",
"status": "pending"
}
}获取执行统计信息。
响应 (200):
{
"code": 0,
"message": "success",
"data": {
"total_count": 1000,
"success_count": 950,
"failed_count": 50,
"running_count": 0,
"success_rate": 95.0
}
}获取数据表列表。
查询参数:
page(int, 默认: 1) - 页码page_size(int, 默认: 20) - 每页数量category(string, 可选) - 分类过滤
响应 (200):
{
"code": 0,
"message": "success",
"data": {
"items": [
{
"table_name": "ak_stock_zh_a_hist",
"display_name": "Stock Zh A Hist",
"row_count": 100000,
"size_bytes": 10485760,
"last_updated_at": "2024-01-01T15:00:00Z"
}
],
"total": 50
}
}获取表详情。
响应 (200):
{
"code": 0,
"message": "success",
"data": {
"table_name": "ak_stock_zh_a_hist",
"display_name": "Stock Zh A Hist",
"row_count": 100000,
"size_bytes": 10485760,
"schema_info": {
"columns": [
{
"name": "id",
"type": "BIGINT",
"nullable": false
},
{
"name": "date",
"type": "DATE",
"nullable": true
}
]
},
"last_updated_at": "2024-01-01T15:00:00Z"
}
}获取表结构。
响应 (200):
{
"code": 0,
"message": "success",
"data": {
"columns": [ /* 列定义数组 */ ]
}
}获取表数据(分页)。
查询参数:
page(int, 默认: 1) - 页码page_size(int, 默认: 100) - 每页数量sort_by(string, 可选) - 排序字段sort_order(string, 可选) - 排序方向 (asc/desc)
响应 (200):
{
"code": 0,
"message": "success",
"data": {
"items": [ /* 数据行数组 */ ],
"total": 100000,
"page": 1,
"page_size": 100
}
}导出表数据。
查询参数:
format(string, 默认: csv) - 导出格式 (csv/excel)limit(int, 可选) - 限制行数
手动下载数据。
请求体:
{
"interface_id": 1,
"parameters": {
"symbol": "000001",
"start_date": "20240101"
}
}响应 (200):
{
"code": 0,
"message": "success",
"data": {
"execution_id": "exec_123",
"status": "pending"
}
}获取下载状态。
响应 (200):
{
"code": 0,
"message": "success",
"data": {
"execution_id": "exec_123",
"status": "running",
"progress": 50,
"rows_affected": 500
}
}获取下载结果。
响应 (200):
{
"code": 0,
"message": "success",
"data": {
"status": "completed",
"rows_affected": 1000,
"table_name": "ak_stock_zh_a_hist",
"execution_time": 5.23
}
}获取接口列表。
查询参数:
page(int, 默认: 1) - 页码page_size(int, 默认: 20) - 每页数量category(string, 可选) - 分类过滤keyword(string, 可选) - 关键词搜索
响应 (200):
{
"code": 0,
"message": "success",
"data": {
"items": [
{
"id": 1,
"name": "stock_zh_a_hist",
"display_name": "A股历史行情",
"category": "stocks",
"description": "获取A股日线数据",
"parameter_count": 5
}
],
"total": 1000
}
}获取接口分类。
响应 (200):
{
"code": 0,
"message": "success",
"data": [
{
"name": "stocks",
"display_name": "股票",
"description": "股票相关数据接口",
"interface_count": 395
}
]
}获取接口详情。
响应 (200):
{
"code": 0,
"message": "success",
"data": {
"id": 1,
"name": "stock_zh_a_hist",
"display_name": "A股历史行情",
"category": "stocks",
"description": "获取A股日线数据",
"parameters": [
{
"name": "symbol",
"type": "string",
"required": true,
"default_value": null,
"description": "股票代码"
}
]
}
}获取接口参数。
响应 (200):
{
"code": 0,
"message": "success",
"data": [ /* 参数数组 */ ]
}获取系统设置。
响应 (200):
{
"code": 0,
"message": "success",
"data": {
"max_concurrent_tasks": 5,
"default_timeout": 300,
"retry_enabled": true,
"max_retries": 3
}
}更新系统设置。
请求体:
{
"max_concurrent_tasks": 10,
"default_timeout": 600
}响应 (200):
{
"code": 0,
"message": "success",
"data": { /* 更新后的设置 */ }
}获取数据库配置。
响应 (200):
{
"code": 0,
"message": "success",
"data": {
"host": "localhost",
"port": 3306,
"database": "akshare_web",
"username": "root"
}
}更新数据库配置。
响应 (200):
{
"code": 0,
"message": "success"
}测试数据库连接。
请求体:
{
"host": "localhost",
"port": 3306,
"database": "test_db",
"username": "root",
"password": "password"
}响应 (200):
{
"code": 0,
"message": "success",
"data": {
"connected": true,
"latency_ms": 5
}
}获取调度器状态。
响应 (200):
{
"code": 0,
"message": "success",
"data": {
"running": true,
"active_jobs": 5,
"next_run_time": "2024-01-02T09:00:00Z"
}
}所有错误响应遵循以下格式:
{
"code": -1,
"message": "error description",
"detail": "detailed error information"
}| 状态码 | 说明 |
|---|---|
| 200 | 成功 |
| 201 | 创建成功 |
| 204 | 无内容 |
| 400 | 请求参数错误 |
| 401 | 未认证 |
| 403 | 无权限 |
| 404 | 资源不存在 |
| 422 | 请求体验证失败 |
| 500 | 服务器内部错误 |
| 代码 | 说明 |
|---|---|
| -1 | 通用错误 |
| 1001 | 认证失败 |
| 1002 | 令牌过期 |
| 1003 | 权限不足 |
| 2001 | 资源不存在 |
| 2002 | 资源已存在 |
| 3001 | 参数验证失败 |
| 3002 | 参数格式错误 |
| 5001 | 数据库错误 |
| 5002 | 调度器错误 |
| 5003 | 数据采集错误 |
API 实施了速率限制:
- 普通用户: 100 请求/分钟
- 管理员: 1000 请求/分钟
超出限制时返回 429 Too Many Requests。
所有列表端点支持分页:
page(int, 默认: 1) - 页码,从1开始page_size(int, 默认: 20) - 每页数量,最大100
响应包含分页信息:
{
"data": {
"items": [],
"total": 100,
"page": 1,
"page_size": 20,
"total_pages": 5
}
}