feat: 初始化考培练系统项目
- 从服务器拉取完整代码 - 按框架规范整理项目结构 - 配置 Drone CI 测试环境部署 - 包含后端(FastAPI)、前端(Vue3)、管理端 技术栈: Vue3 + TypeScript + FastAPI + MySQL
This commit is contained in:
664
backend/docs/openapi_sql_executor.json
Normal file
664
backend/docs/openapi_sql_executor.json
Normal file
@@ -0,0 +1,664 @@
|
||||
{
|
||||
"openapi": "3.1.0",
|
||||
"info": {
|
||||
"title": "KaoPeiLian SQL Executor API",
|
||||
"description": "SQL 执行器 API,专门为 Dify 平台集成设计,支持对考陪练系统数据库执行查询和写入操作。\n\n## 主要功能\n- 执行 SQL 查询和写入操作\n- 支持参数化查询防止 SQL 注入\n- 获取数据库表列表和表结构\n- SQL 语句验证\n\n## 安全说明\n所有接口都需要 JWT Bearer Token 认证。请先通过登录接口获取访问令牌。",
|
||||
"version": "1.0.0",
|
||||
"contact": {
|
||||
"name": "KaoPeiLian Tech Support",
|
||||
"email": "support@kaopeilian.com"
|
||||
}
|
||||
},
|
||||
"servers": [
|
||||
{
|
||||
"url": "http://120.79.247.16:8000/api/v1",
|
||||
"description": "考陪练系统服务器"
|
||||
},
|
||||
{
|
||||
"url": "http://aiedu.ireborn.com.cn/api/v1",
|
||||
"description": "域名访问"
|
||||
}
|
||||
],
|
||||
"security": [
|
||||
{
|
||||
"bearerAuth": []
|
||||
}
|
||||
],
|
||||
"paths": {
|
||||
"/auth/login": {
|
||||
"post": {
|
||||
"tags": ["认证"],
|
||||
"summary": "用户登录",
|
||||
"description": "获取访问令牌,用于后续 API 调用",
|
||||
"security": [],
|
||||
"requestBody": {
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/LoginRequest"
|
||||
},
|
||||
"examples": {
|
||||
"admin": {
|
||||
"summary": "管理员登录",
|
||||
"value": {
|
||||
"username": "admin",
|
||||
"password": "admin123"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "登录成功",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/LoginResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "用户名或密码错误",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/sql/execute": {
|
||||
"post": {
|
||||
"tags": ["SQL执行器"],
|
||||
"summary": "执行 SQL 语句",
|
||||
"description": "执行查询或写入 SQL 语句。\n\n**查询操作**: SELECT, SHOW, DESCRIBE\n**写入操作**: INSERT, UPDATE, DELETE, CREATE, ALTER, DROP\n\n支持参数化查询,使用 `:param_name` 格式定义参数。",
|
||||
"requestBody": {
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/SqlExecuteRequest"
|
||||
},
|
||||
"examples": {
|
||||
"simpleQuery": {
|
||||
"summary": "简单查询",
|
||||
"value": {
|
||||
"sql": "SELECT id, username, role FROM users LIMIT 5"
|
||||
}
|
||||
},
|
||||
"parameterizedQuery": {
|
||||
"summary": "参数化查询",
|
||||
"value": {
|
||||
"sql": "SELECT * FROM courses WHERE category = :category AND status = :status",
|
||||
"params": {
|
||||
"category": "护肤",
|
||||
"status": "active"
|
||||
}
|
||||
}
|
||||
},
|
||||
"insertData": {
|
||||
"summary": "插入数据",
|
||||
"value": {
|
||||
"sql": "INSERT INTO knowledge_points (title, content, course_id) VALUES (:title, :content, :course_id)",
|
||||
"params": {
|
||||
"title": "面部护理基础",
|
||||
"content": "面部护理的基本步骤...",
|
||||
"course_id": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "SQL 执行成功",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"oneOf": [
|
||||
{
|
||||
"$ref": "#/components/schemas/QueryResponse"
|
||||
},
|
||||
{
|
||||
"$ref": "#/components/schemas/ExecuteResponse"
|
||||
}
|
||||
]
|
||||
},
|
||||
"examples": {
|
||||
"queryResult": {
|
||||
"summary": "查询结果",
|
||||
"value": {
|
||||
"code": 200,
|
||||
"message": "SQL 执行成功",
|
||||
"data": {
|
||||
"type": "query",
|
||||
"columns": ["id", "username", "role"],
|
||||
"rows": [
|
||||
{
|
||||
"id": 1,
|
||||
"username": "admin",
|
||||
"role": "admin"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"username": "user1",
|
||||
"role": "trainee"
|
||||
}
|
||||
],
|
||||
"row_count": 2
|
||||
}
|
||||
}
|
||||
},
|
||||
"executeResult": {
|
||||
"summary": "写入结果",
|
||||
"value": {
|
||||
"code": 200,
|
||||
"message": "SQL 执行成功",
|
||||
"data": {
|
||||
"type": "execute",
|
||||
"affected_rows": 1,
|
||||
"success": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "请求参数错误",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "未认证或认证失败",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"500": {
|
||||
"description": "SQL 执行错误",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/sql/validate": {
|
||||
"post": {
|
||||
"tags": ["SQL执行器"],
|
||||
"summary": "验证 SQL 语法",
|
||||
"description": "验证 SQL 语句的语法正确性,不执行实际操作",
|
||||
"requestBody": {
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/SqlValidateRequest"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "验证完成",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ValidateResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/sql/tables": {
|
||||
"get": {
|
||||
"tags": ["SQL执行器"],
|
||||
"summary": "获取表列表",
|
||||
"description": "获取数据库中所有表的列表",
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "成功获取表列表",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/TablesResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "未认证",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/sql/table/{table_name}/schema": {
|
||||
"get": {
|
||||
"tags": ["SQL执行器"],
|
||||
"summary": "获取表结构",
|
||||
"description": "获取指定表的结构信息,包括字段名、类型、约束等",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "table_name",
|
||||
"in": "path",
|
||||
"required": true,
|
||||
"description": "表名",
|
||||
"schema": {
|
||||
"type": "string",
|
||||
"pattern": "^[a-zA-Z_][a-zA-Z0-9_]*$"
|
||||
},
|
||||
"example": "users"
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "成功获取表结构",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/TableSchemaResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "无效的表名",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "未认证",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/ErrorResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"securitySchemes": {
|
||||
"bearerAuth": {
|
||||
"type": "http",
|
||||
"scheme": "bearer",
|
||||
"bearerFormat": "JWT",
|
||||
"description": "使用登录接口返回的 access_token。\n格式: Bearer {access_token}"
|
||||
}
|
||||
},
|
||||
"schemas": {
|
||||
"LoginRequest": {
|
||||
"type": "object",
|
||||
"required": ["username", "password"],
|
||||
"properties": {
|
||||
"username": {
|
||||
"type": "string",
|
||||
"description": "用户名",
|
||||
"example": "admin"
|
||||
},
|
||||
"password": {
|
||||
"type": "string",
|
||||
"format": "password",
|
||||
"description": "密码",
|
||||
"example": "admin123"
|
||||
}
|
||||
}
|
||||
},
|
||||
"LoginResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"code": {
|
||||
"type": "integer",
|
||||
"example": 200
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"example": "登录成功"
|
||||
},
|
||||
"data": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"user": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "integer",
|
||||
"example": 1
|
||||
},
|
||||
"username": {
|
||||
"type": "string",
|
||||
"example": "admin"
|
||||
},
|
||||
"role": {
|
||||
"type": "string",
|
||||
"example": "admin"
|
||||
}
|
||||
}
|
||||
},
|
||||
"token": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"access_token": {
|
||||
"type": "string",
|
||||
"description": "JWT 访问令牌",
|
||||
"example": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."
|
||||
},
|
||||
"token_type": {
|
||||
"type": "string",
|
||||
"example": "bearer"
|
||||
},
|
||||
"expires_in": {
|
||||
"type": "integer",
|
||||
"description": "过期时间(秒)",
|
||||
"example": 1800
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"SqlExecuteRequest": {
|
||||
"type": "object",
|
||||
"required": ["sql"],
|
||||
"properties": {
|
||||
"sql": {
|
||||
"type": "string",
|
||||
"description": "要执行的 SQL 语句",
|
||||
"example": "SELECT * FROM users WHERE role = :role"
|
||||
},
|
||||
"params": {
|
||||
"type": "object",
|
||||
"description": "SQL 参数字典,键为参数名,值为参数值",
|
||||
"additionalProperties": true,
|
||||
"example": {
|
||||
"role": "admin"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"SqlValidateRequest": {
|
||||
"type": "object",
|
||||
"required": ["sql"],
|
||||
"properties": {
|
||||
"sql": {
|
||||
"type": "string",
|
||||
"description": "要验证的 SQL 语句",
|
||||
"example": "SELECT * FROM users"
|
||||
}
|
||||
}
|
||||
},
|
||||
"QueryResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"code": {
|
||||
"type": "integer",
|
||||
"example": 200
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"example": "SQL 执行成功"
|
||||
},
|
||||
"data": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"enum": ["query"],
|
||||
"example": "query"
|
||||
},
|
||||
"columns": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "列名数组",
|
||||
"example": ["id", "username", "role"]
|
||||
},
|
||||
"rows": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"additionalProperties": true
|
||||
},
|
||||
"description": "查询结果行"
|
||||
},
|
||||
"row_count": {
|
||||
"type": "integer",
|
||||
"description": "返回的行数",
|
||||
"example": 5
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"ExecuteResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"code": {
|
||||
"type": "integer",
|
||||
"example": 200
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"example": "SQL 执行成功"
|
||||
},
|
||||
"data": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"enum": ["execute"],
|
||||
"example": "execute"
|
||||
},
|
||||
"affected_rows": {
|
||||
"type": "integer",
|
||||
"description": "影响的行数",
|
||||
"example": 1
|
||||
},
|
||||
"success": {
|
||||
"type": "boolean",
|
||||
"example": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"ValidateResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"code": {
|
||||
"type": "integer",
|
||||
"example": 200
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"example": "SQL 验证完成"
|
||||
},
|
||||
"data": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"valid": {
|
||||
"type": "boolean",
|
||||
"description": "SQL 是否有效",
|
||||
"example": true
|
||||
},
|
||||
"warnings": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "警告信息列表",
|
||||
"example": ["包含危险操作: DROP"]
|
||||
},
|
||||
"sql_type": {
|
||||
"type": "string",
|
||||
"description": "SQL 类型",
|
||||
"example": "SELECT"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"TablesResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"code": {
|
||||
"type": "integer",
|
||||
"example": 200
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"example": "获取表列表成功"
|
||||
},
|
||||
"data": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"tables": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "表名列表",
|
||||
"example": ["users", "courses", "exams"]
|
||||
},
|
||||
"count": {
|
||||
"type": "integer",
|
||||
"description": "表的数量",
|
||||
"example": 20
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"TableSchemaResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"code": {
|
||||
"type": "integer",
|
||||
"example": 200
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"example": "获取表结构成功"
|
||||
},
|
||||
"data": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"table_name": {
|
||||
"type": "string",
|
||||
"example": "users"
|
||||
},
|
||||
"columns": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"field": {
|
||||
"type": "string",
|
||||
"description": "字段名",
|
||||
"example": "id"
|
||||
},
|
||||
"type": {
|
||||
"type": "string",
|
||||
"description": "字段类型",
|
||||
"example": "int(11)"
|
||||
},
|
||||
"null": {
|
||||
"type": "string",
|
||||
"enum": ["YES", "NO"],
|
||||
"description": "是否可为空",
|
||||
"example": "NO"
|
||||
},
|
||||
"key": {
|
||||
"type": "string",
|
||||
"description": "键类型(PRI, UNI, MUL)",
|
||||
"example": "PRI"
|
||||
},
|
||||
"default": {
|
||||
"type": "string",
|
||||
"nullable": true,
|
||||
"description": "默认值",
|
||||
"example": null
|
||||
},
|
||||
"extra": {
|
||||
"type": "string",
|
||||
"description": "额外信息",
|
||||
"example": "auto_increment"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"column_count": {
|
||||
"type": "integer",
|
||||
"description": "列的数量",
|
||||
"example": 10
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"ErrorResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"detail": {
|
||||
"type": "string",
|
||||
"description": "错误详情",
|
||||
"example": "SQL 执行失败: You have an error in your SQL syntax"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": [
|
||||
{
|
||||
"name": "认证",
|
||||
"description": "用户认证相关接口"
|
||||
},
|
||||
{
|
||||
"name": "SQL执行器",
|
||||
"description": "SQL 执行和管理相关接口"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user