# SQL_API **Repository Path**: chenying314/sql_-api ## Basic Information - **Project Name**: SQL_API - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-05 - **Last Updated**: 2026-06-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TestAPI — SQL 转 RESTful API 数据服务平台 [![Java](https://img.shields.io/badge/Java-17-orange.svg)](https://openjdk.org/) [![Spring Boot](https://img.shields.io/badge/Spring%20Boot-3.2.5-brightgreen.svg)](https://spring.io/projects/spring-boot) [![Vue](https://img.shields.io/badge/Vue-3.4-42b883.svg)](https://vuejs.org/) [![License](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) 一个**无需编码即可将 SQL 查询一键发布为 RESTful API** 的轻量数据服务平台。支持多数据源管理、动态参数绑定、JWT 认证、调用日志追踪,适合快速搭建数据接口、BI 数据出口、内部工具链等场景。 --- ## ✨ 核心功能 - **多数据源管理** — 支持添加多个 MySQL 数据源,在线测试连接,独立管理 - **SQL 在线编辑器** — 内置 SQL 编辑器,支持格式化、执行预览 - **一键生成 API** — 编写 SQL 后保存为 API 接口,自动暴露 `GET /api/dynamic/{path}` 端点 - **动态参数绑定** — SQL 中使用 `#{paramName}` 占位符,请求参数自动注入(防注入) - **JWT 认证** — 基于令牌的登录鉴权,支持多用户账号体系 - **调用日志追踪** — 完整记录每次 API 调用的 IP、参数、耗时、返回数据摘要 - **详尽错误码** — 28 种细分错误码,精确定位问题 - **暖色调深色 UI** — Vue3 + Element Plus 构建的暗色主题管理后台,护眼美观 --- ## 🛠 技术栈 | 层级 | 技术 | |------|------| | **后端框架** | Spring Boot 3.2.5 | | **安全认证** | Spring Security + JWT (jjwt 0.12.5) | | **数据持久层** | Spring Data JPA + Hibernate | | **数据库** | MySQL 8.0+ | | **工具库** | Hutool 5.8.25, Lombok | | **前端框架** | Vue 3.4 (Composition API) | | **UI 组件库** | Element Plus 2.7 | | **状态管理** | Pinia 2.1 | | **HTTP 客户端** | Axios 1.7 | | **构建工具** | Maven (后端) + Vite 5 (前端) | | **CSS 预处理** | SCSS | --- ## 📁 项目结构 ``` testapi/ ├── pom.xml # Maven 配置 ├── init.sql # 数据库初始化脚本 ├── run_backend.bat # Windows 后端启动脚本 │ ├── src/main/java/com/chenying/testapi/ │ ├── TestapiApplication.java # 启动入口 │ ├── config/ # 配置层 │ │ ├── DataInitializer.java # 初始化默认管理员 │ │ ├── GlobalExceptionHandler.java # 全局异常处理 │ │ ├── SecurityConfig.java # Spring Security 配置 │ │ └── WebConfig.java # CORS 等 Web 配置 │ ├── controller/ # 控制器层 (5个) │ │ ├── ApiGatewayController.java # 动态API网关 │ │ ├── AuthController.java # 登录/用户管理 │ │ ├── DataSourceController.java # 数据源 CRUD │ │ ├── LogController.java # 调用日志查询 │ │ └── SqlApiController.java # API配置 CRUD │ ├── dto/ # 数据传输对象 │ ├── entity/ # JPA 实体 (4个) │ │ ├── SysUser.java # 系统用户 │ │ ├── DataSourceConfig.java # 数据源配置 │ │ ├── SqlApiConfig.java # SQL-API 配置 │ │ └── ApiCallLog.java # 调用日志 │ ├── exception/ # 异常与错误码 │ │ ├── ApiException.java │ │ └── ErrorCode.java # 28种错误码枚举 │ ├── repository/ # JPA Repository │ ├── security/ # JWT 过滤器与令牌 │ ├── service/ # 业务逻辑层 (5个) │ └── util/ # 工具类 (AES, JWT, SQL校验) │ └── src/main/frontend/ # Vue 前端 ├── src/ │ ├── router/index.js # 路由配置 │ ├── store/user.js # 用户状态 (Pinia) │ ├── utils/ │ │ ├── api.js # 后端 API 封装 │ │ └── request.js # Axios 拦截器 │ ├── styles/global.scss # 全局暖色深色主题 │ └── views/ # 页面组件 │ ├── Login.vue # 登录页 │ ├── Layout.vue # 主布局(侧边栏+顶栏) │ ├── Dashboard.vue # 工作台首页 │ ├── DataSource.vue # 数据源管理 │ ├── SqlEditor.vue # SQL 编辑器 │ ├── ApiManager.vue # API 接口管理 │ └── ApiLog.vue # 调用日志 └── vite.config.ts ``` --- ## 🗄 数据库设计 | 表名 | 说明 | 关键字段 | |------|------|---------| | `sys_user` | 系统用户 | id, username, password(BCrypt), nickname, status, role | | `data_source_config` | 数据源配置 | id, user_id, source_name, db_host, db_port, db_name, db_username, db_password(AES加密) | | `sql_api_config` | API 配置 | id, user_id, source_id, api_name, api_path, sql_content, api_desc, status | | `api_call_log` | 调用日志 | id, api_id, user_id, call_ip, request_params, cost_time, call_status, error_msg, data_summary | --- ## 🔌 API 端点 ### 认证相关 | 方法 | 路径 | 说明 | 认证 | |------|------|------|------| | POST | `/api/auth/login` | 用户登录 | 否 | | POST | `/api/auth/change-password` | 修改密码 | 是 | ### 数据源管理 | 方法 | 路径 | 说明 | |------|------|------| | GET | `/api/datasource` | 获取当前用户所有数据源 | | POST | `/api/datasource` | 添加数据源 | | PUT | `/api/datasource/{id}` | 更新数据源 | | DELETE | `/api/datasource/{id}` | 删除数据源 | | POST | `/api/datasource/test` | 测试数据源连接 | ### SQL 执行 & API 管理 | 方法 | 路径 | 说明 | |------|------|------| | POST | `/api/sql/execute` | 在线执行 SQL | | GET | `/api/sql/configs` | 获取 API 配置列表 | | POST | `/api/sql/config` | 创建 API 配置(SQL→API) | | PUT | `/api/sql/config/{id}` | 更新 API 配置 | | DELETE | `/api/sql/config/{id}` | 删除 API 配置 | | PUT | `/api/sql/config/{id}/status` | 启用/禁用 API | ### 动态 API 网关 | 方法 | 路径 | 说明 | |------|------|------| | GET | `/api/dynamic/{apiPath}` | 执行已配置的 SQL 并返回 JSON(支持 `?param=xxx` 动态参数) | ### 调用日志 | 方法 | 路径 | 说明 | |------|------|------| | GET | `/api/log/stats` | 获取调用统计 | | GET | `/api/log/list` | 分页查询调用日志 | --- ## 🚀 快速开始 ### 环境要求 - Java 17+ - MySQL 8.0+ - Maven 3.8+ - Node.js 18+ ### 1. 初始化数据库 连接到你的 MySQL 服务器,执行 `init.sql`: ```sql CREATE DATABASE IF NOT EXISTS testapi DEFAULT CHARSET utf8mb4; -- 然后在 init.sql 中修改数据库地址和密码后执行完整脚本 ``` ### 2. 配置数据库连接 编辑 `src/main/resources/application.properties`,添加数据库连接: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/testapi?useUnicode=true&characterEncoding=utf8mb4&useSSL=false&serverTimezone=Asia/Shanghai spring.datasource.username=root spring.datasource.password=你的密码 ``` ### 3. 启动后端 ```bash # Windows run_backend.bat # 或手动 mvnw spring-boot:run ``` 后端启动后访问:`http://localhost:8080` ### 4. 启动前端 ```bash cd src/main/frontend npm install npm run dev ``` 前端启动后访问:`http://localhost:5173` ### 5. 登录 - 用户名:`admin` - 密码:`admin123` --- ## 📋 使用流程 ``` 1. 登录系统 ↓ 2. 添加数据源 → 配置 MySQL 连接信息 → 测试连接 ↓ 3. SQL 编辑器 → 选择数据源 → 编写 SQL → 执行预览 ↓ 4. 保存为 API → 设置接口名称和路径 ↓ 5. 外部访问 GET /api/dynamic/{你的路径}?参数=值 ↓ 6. 查看调用日志 → 追踪每次调用的详细信息 ``` --- ## 🔐 错误码说明 ### 认证类 (AUTH) | 错误码 | 说明 | HTTP | |--------|------|------| | `AUTH_001` | 未授权,请重新登录 | 401 | | `AUTH_002` | 令牌已过期 | 401 | | `AUTH_003` | 令牌无效 | 401 | | `AUTH_004` | 用户名或密码错误 | 401 | | `AUTH_005` | 账号已被禁用 | 401 | ### 权限类 (PERM) | 错误码 | 说明 | HTTP | |--------|------|------| | `PERM_001` | 无权限访问 | 403 | | `PERM_002` | 无权操作该数据源 | 403 | | `PERM_003` | 无权操作此API | 403 | ### 参数类 (PARAM) | 错误码 | 说明 | HTTP | |--------|------|------| | `PARAM_001` | 参数校验失败 | 400 | ### 数据源类 (DS) | 错误码 | 说明 | HTTP | |--------|------|------| | `DS_001` | 数据源不存在 | 400 | | `DS_002` | 数据源连接失败 | 500 | ### SQL 类 (SQL) | 错误码 | 说明 | HTTP | |--------|------|------| | `SQL_001` | SQL执行失败 | 500 | | `SQL_002` | SQL语法错误 | 500 | | `SQL_003` | 存在未解析的动态参数 | 400 | | `SQL_005` | SQL存在注入风险 | 400 | ### API 类 (API) | 错误码 | 说明 | HTTP | |--------|------|------| | `API_001` | API接口不存在 | 404 | | `API_003` | API路径已存在 | 400 | ### 用户类 (USER) | 错误码 | 说明 | HTTP | |--------|------|------| | `USER_001` | 用户不存在 | 400 | | `USER_002` | 原密码错误 | 400 | ### 系统类 (SYS) | 错误码 | 说明 | HTTP | |--------|------|------| | `SYS_001` | 服务器内部错误 | 500 | --- ## 🎨 界面预览 管理后台采用**暖色调深色主题**,视觉柔和、文字清晰,支持以下页面: | 页面 | 功能 | |------|------| | **登录页** | 金橙渐变 Logo + 表单登录 | | **工作台** | 统计卡片 + 快捷入口 + 系统信息 | | **数据源管理** | 卡片网格展示 + 在线测试连接 | | **SQL 编辑器** | 左右分栏:编辑区 + 结果预览 | | **API 接口管理** | 表格展示 + 启用/禁用开关 + 编辑弹窗 | | **调用日志** | 筛选 + 分页表格 + 详情弹窗 | --- ## ⚠️ 安全说明 - 数据源密码使用 **AES 加密** 存储 - 用户密码使用 **BCrypt** 哈希 - SQL 动态参数使用**白名单正则**检测,拦截注入攻击(`DROP`、`DELETE`、`UPDATE`、`--` 注释等) - JWT Token 默认 24 小时过期 - 所有业务数据按用户隔离 --- ## 📦 构建部署 ```bash # 后端打包 mvnw clean package -DskipTests # 前端构建 cd src/main/frontend npm run build # 将前端 dist 内容放入后端 static 目录即可一体化部署 ``` --- ## 📄 License MIT License