| openapi: 3.0.3 |
| info: |
| title: RamEx 拉曼光谱分析系统 API |
| description: | |
| RamEx(Raman Expression Analysis)是一个专业的拉曼光谱数据分析平台API。 |
| |
| |
| 所有API接口(除了Token验证接口)都需要提供有效的Token进行认证。 |
|
|
| Token可以通过以下三种方式传递: |
| 1. **Authorization Header**: `Authorization: Token <your_token>` |
| 2. **URL参数**: `?token=<your_token>` |
| 3. **JSON数据**: `{"token": "<your_token>"}` |
|
|
| |
| 1. 使用第三方Token验证身份 |
| 2. 创建项目 |
| 3. 上传拉曼光谱数据(ZIP格式) |
| 4. 确认分组信息 |
| 5. 执行数据预处理 |
| 6. 进行无元数据分析或基于元数据分析 |
| 7. 查看和导出结果 |
|
|
| version: 1.0.0 |
| contact: |
| email: support@ramex.com |
| license: |
| name: BSD License |
|
|
| servers: |
| - url: http://localhost:8000/api |
| description: 本地开发服务器 |
| - url: http://your-domain.com/api |
| description: 生产服务器 |
|
|
| tags: |
| - name: 认证 |
| description: Token验证和用户信息接口 |
| - name: 项目管理 |
| description: 项目的创建、查询、更新和删除 |
| - name: 数据管理 |
| description: 数据文件的上传、选择、更新和删除 |
| - name: 数据预处理 |
| description: 拉曼光谱数据预处理功能 |
| - name: 无元数据分析 |
| description: 不依赖外部元数据的分析方法 |
| - name: 基于元数据分析 |
| description: 基于元数据的高级分析方法 |
| - name: 结果管理 |
| description: 分析结果的查看和导出 |
|
|
| components: |
| securitySchemes: |
| TokenAuth: |
| type: apiKey |
| in: header |
| name: Authorization |
| description: 'Token认证,格式: Token <your_token>' |
|
|
| schemas: |
| Error: |
| type: object |
| properties: |
| error: |
| type: object |
| properties: |
| code: |
| type: string |
| description: 错误代码 |
| message: |
| type: string |
| description: 错误信息 |
| required: |
| - error |
|
|
| Project: |
| type: object |
| properties: |
| id: |
| type: string |
| format: uuid |
| description: 项目唯一标识符 |
| example: "7fb9352d-1797-4d8d-bed7-cc388352f65c" |
| name: |
| type: string |
| description: 项目名称 |
| example: "酵母拉曼光谱分析" |
| description: |
| type: string |
| description: 项目描述 |
| example: "酵母细胞在不同时间点的拉曼光谱数据分析" |
| created_at: |
| type: string |
| format: date-time |
| description: 创建时间 |
| last_modified: |
| type: string |
| format: date-time |
| description: 最后修改时间 |
| status: |
| type: string |
| enum: |
| - initialized |
| - data_loaded |
| - preprocessing |
| - preprocessing_completed |
| - analysis |
| - completed |
| - error |
| description: | |
| 项目状态: |
| - initialized: 已初始化 |
| - data_loaded: 数据已加载 |
| - preprocessing: 数据预处理中 |
| - preprocessing_completed: 数据预处理完成 |
| - analysis: 分析中 |
| - completed: 已完成 |
| - error: 出错 |
| required: |
| - name |
|
|
| ProjectDetail: |
| allOf: |
| - $ref: '#/components/schemas/Project' |
| - type: object |
| properties: |
| data_files: |
| type: array |
| items: |
| $ref: '#/components/schemas/DataFile' |
| description: 项目的所有数据文件 |
| active_data_file: |
| $ref: '#/components/schemas/DataFile' |
| description: 当前活动的数据文件 |
| data_files_count: |
| type: integer |
| description: 数据文件总数 |
|
|
| DataFile: |
| type: object |
| properties: |
| id: |
| type: integer |
| description: 文件ID |
| filename: |
| type: string |
| description: 文件名 |
| example: "yeast_data.zip" |
| uploaded_at: |
| type: string |
| format: date-time |
| description: 上传时间 |
| wavenumber_min: |
| type: number |
| format: float |
| description: 最小波数 (cm⁻¹) |
| example: 500.0 |
| wavenumber_max: |
| type: number |
| format: float |
| description: 最大波数 (cm⁻¹) |
| example: 3150.0 |
| group_index: |
| type: integer |
| description: 分组索引(文件名中用于分组的部分位置) |
| example: 2 |
|
|
| TokenValidationResponse: |
| type: object |
| properties: |
| valid: |
| type: boolean |
| description: Token是否有效 |
| message: |
| type: string |
| description: 验证消息 |
| user_info: |
| type: object |
| properties: |
| third_party_username: |
| type: string |
| description: 第三方用户名 |
| local_user_exists: |
| type: boolean |
| description: 本地用户是否已存在 |
| local_username: |
| type: string |
| description: 本地用户名 |
| local_user_id: |
| type: integer |
| description: 本地用户ID |
| token_info: |
| type: object |
| properties: |
| token_preview: |
| type: string |
| description: Token预览 |
| token_length: |
| type: integer |
| description: Token长度 |
|
|
| UserInfo: |
| type: object |
| properties: |
| user_info: |
| type: object |
| properties: |
| local_user_id: |
| type: integer |
| description: 本地用户ID |
| local_username: |
| type: string |
| description: 本地用户名 |
| email: |
| type: string |
| description: 邮箱 |
| date_joined: |
| type: string |
| format: date-time |
| description: 注册时间 |
| last_login: |
| type: string |
| format: date-time |
| description: 最后登录时间 |
| third_party_info: |
| type: object |
| properties: |
| third_party_user_id: |
| type: integer |
| description: 第三方用户ID |
| third_party_username: |
| type: string |
| description: 第三方用户名 |
| created_at: |
| type: string |
| format: date-time |
| description: 映射创建时间 |
| statistics: |
| type: object |
| properties: |
| projects_count: |
| type: integer |
| description: 项目总数 |
| data_directories: |
| type: object |
| properties: |
| user_base_dir: |
| type: string |
| description: 用户基础目录 |
| projects_dir: |
| type: string |
| description: 项目目录 |
|
|
| paths: |
| /token/validate/: |
| post: |
| tags: |
| - 认证 |
| summary: 验证Token |
| description: | |
| 验证Token的有效性并获取用户信息。 |
| 此接口不需要认证,用于首次验证Token。 |
| operationId: validateToken |
| security: [] |
| requestBody: |
| content: |
| application/json: |
| schema: |
| type: object |
| properties: |
| token: |
| type: string |
| description: 要验证的Token |
| example: "0c47b3d5b1aa561a5032f50e95bf069afa9a9e55" |
| application/x-www-form-urlencoded: |
| schema: |
| type: object |
| properties: |
| token: |
| type: string |
| parameters: |
| - name: token |
| in: query |
| description: Token(也可以通过URL参数传递) |
| schema: |
| type: string |
| responses: |
| '200': |
| description: Token验证成功 |
| content: |
| application/json: |
| schema: |
| $ref: '#/components/schemas/TokenValidationResponse' |
| '400': |
| description: Token参数缺失 |
| content: |
| application/json: |
| schema: |
| $ref: '#/components/schemas/Error' |
| '401': |
| description: Token无效或已过期 |
| content: |
| application/json: |
| schema: |
| $ref: '#/components/schemas/Error' |
|
|
| get: |
| tags: |
| - 认证 |
| summary: 验证Token(GET方式) |
| description: 通过GET方法验证Token,Token通过URL参数传递 |
| operationId: validateTokenGet |
| security: [] |
| parameters: |
| - name: token |
| in: query |
| required: true |
| description: 要验证的Token |
| schema: |
| type: string |
| responses: |
| '200': |
| description: Token验证成功 |
| content: |
| application/json: |
| schema: |
| $ref: '#/components/schemas/TokenValidationResponse' |
| '400': |
| description: Token参数缺失 |
| '401': |
| description: Token无效 |
|
|
| /user/info/: |
| get: |
| tags: |
| - 认证 |
| summary: 获取当前用户信息 |
| description: 获取已认证用户的详细信息,包括本地用户信息、第三方映射信息和统计数据 |
| operationId: getUserInfo |
| security: |
| - TokenAuth: [] |
| responses: |
| '200': |
| description: 成功获取用户信息 |
| content: |
| application/json: |
| schema: |
| $ref: '#/components/schemas/UserInfo' |
| '401': |
| description: 用户未认证 |
| content: |
| application/json: |
| schema: |
| $ref: '#/components/schemas/Error' |
|
|
| /projects/: |
| get: |
| tags: |
| - 项目管理 |
| summary: 获取项目列表 |
| description: 获取当前用户的所有项目列表 |
| operationId: listProjects |
| security: |
| - TokenAuth: [] |
| responses: |
| '200': |
| description: 成功获取项目列表 |
| content: |
| application/json: |
| schema: |
| type: array |
| items: |
| $ref: '#/components/schemas/Project' |
| '401': |
| description: 未授权 |
|
|
| post: |
| tags: |
| - 项目管理 |
| summary: 创建新项目 |
| description: 创建一个新的拉曼光谱分析项目 |
| operationId: createProject |
| security: |
| - TokenAuth: [] |
| requestBody: |
| required: true |
| content: |
| application/json: |
| schema: |
| type: object |
| properties: |
| name: |
| type: string |
| description: 项目名称 |
| example: "酵母拉曼光谱分析" |
| description: |
| type: string |
| description: 项目描述 |
| example: "酵母细胞在不同时间点的拉曼光谱数据分析" |
| required: |
| - name |
| responses: |
| '201': |
| description: 项目创建成功 |
| content: |
| application/json: |
| schema: |
| allOf: |
| - $ref: '#/components/schemas/Project' |
| - type: object |
| properties: |
| next_steps: |
| type: array |
| items: |
| type: object |
| properties: |
| step: |
| type: string |
| url: |
| type: string |
| description: |
| type: string |
| '400': |
| description: 请求参数错误 |
| '401': |
| description: 未授权 |
|
|
| /projects/{project_id}/: |
| get: |
| tags: |
| - 项目管理 |
| summary: 获取项目详情 |
| description: 获取指定项目的详细信息,包括所有数据文件 |
| operationId: getProject |
| security: |
| - TokenAuth: [] |
| parameters: |
| - name: project_id |
| in: path |
| required: true |
| description: 项目UUID |
| schema: |
| type: string |
| format: uuid |
| responses: |
| '200': |
| description: 成功获取项目详情 |
| content: |
| application/json: |
| schema: |
| $ref: '#/components/schemas/ProjectDetail' |
| '404': |
| description: 项目不存在 |
|
|
| put: |
| tags: |
| - 项目管理 |
| summary: 更新项目(完整更新) |
| description: 完整更新项目信息 |
| operationId: updateProject |
| security: |
| - TokenAuth: [] |
| parameters: |
| - name: project_id |
| in: path |
| required: true |
| schema: |
| type: string |
| format: uuid |
| requestBody: |
| required: true |
| content: |
| application/json: |
| schema: |
| type: object |
| properties: |
| name: |
| type: string |
| description: |
| type: string |
| responses: |
| '200': |
| description: 更新成功 |
| content: |
| application/json: |
| schema: |
| $ref: '#/components/schemas/Project' |
| '404': |
| description: 项目不存在 |
|
|
| patch: |
| tags: |
| - 项目管理 |
| summary: 更新项目(部分更新) |
| description: 部分更新项目信息 |
| operationId: partialUpdateProject |
| security: |
| - TokenAuth: [] |
| parameters: |
| - name: project_id |
| in: path |
| required: true |
| schema: |
| type: string |
| format: uuid |
| requestBody: |
| content: |
| application/json: |
| schema: |
| type: object |
| properties: |
| name: |
| type: string |
| description: |
| type: string |
| responses: |
| '200': |
| description: 更新成功 |
| '404': |
| description: 项目不存在 |
|
|
| delete: |
| tags: |
| - 项目管理 |
| summary: 删除项目 |
| description: 删除项目及其所有关联的数据文件 |
| operationId: deleteProject |
| security: |
| - TokenAuth: [] |
| parameters: |
| - name: project_id |
| in: path |
| required: true |
| schema: |
| type: string |
| format: uuid |
| responses: |
| '204': |
| description: 删除成功 |
| content: |
| application/json: |
| schema: |
| type: object |
| properties: |
| status: |
| type: string |
| example: "success" |
| message: |
| type: string |
| example: "项目已成功删除" |
| '404': |
| description: 项目不存在 |
| '500': |
| description: 删除文件时出错 |
|
|
| /projects/{project_id}/data/upload/: |
| post: |
| tags: |
| - 数据管理 |
| summary: 上传数据文件 |
| description: | |
| 上传拉曼光谱数据文件(ZIP格式)。 |
| ZIP文件应包含多个.txt格式的拉曼光谱数据文件。 |
| operationId: uploadData |
| security: |
| - TokenAuth: [] |
| parameters: |
| - name: project_id |
| in: path |
| required: true |
| schema: |
| type: string |
| format: uuid |
| requestBody: |
| required: true |
| content: |
| multipart/form-data: |
| schema: |
| type: object |
| properties: |
| files: |
| type: string |
| format: binary |
| description: ZIP格式的数据文件 |
| group_index: |
| type: integer |
| description: 分组索引(文件名中用于分组的部分位置,按下划线分隔) |
| default: 2 |
| example: 2 |
| Wavenumber range: |
| type: string |
| description: 波数范围,格式为"最小值,最大值" |
| example: "500,3150" |
| required: |
| - files |
| responses: |
| '200': |
| description: 上传成功 |
| content: |
| application/json: |
| schema: |
| type: object |
| properties: |
| status: |
| type: string |
| example: "success" |
| group_names: |
| type: array |
| items: |
| type: string |
| description: 检测到的分组名称 |
| example: ["Control", "Treatment"] |
| next_steps: |
| type: array |
| items: |
| type: object |
| message: |
| type: string |
| '400': |
| description: 请求参数错误 |
| '404': |
| description: 项目不存在 |
| '500': |
| description: 处理文件时出错 |
|
|
| /projects/{project_id}/data/group_info/: |
| get: |
| tags: |
| - 数据管理 |
| summary: 获取分组信息 |
| description: 获取当前活动数据文件的分组信息 |
| operationId: getGroupInfo |
| security: |
| - TokenAuth: [] |
| parameters: |
| - name: project_id |
| in: path |
| required: true |
| schema: |
| type: string |
| format: uuid |
| responses: |
| '200': |
| description: 成功获取分组信息 |
| content: |
| application/json: |
| schema: |
| type: object |
| properties: |
| status: |
| type: string |
| group_names: |
| type: array |
| items: |
| type: string |
| '400': |
| description: 项目没有活动数据文件 |
| '404': |
| description: 项目不存在 |
|
|
| /projects/{project_id}/data/save_rds/: |
| post: |
| tags: |
| - 数据管理 |
| summary: 保存确认的RDS数据 |
| description: 确认分组信息并保存RDS数据文件 |
| operationId: saveRdsData |
| security: |
| - TokenAuth: [] |
| parameters: |
| - name: project_id |
| in: path |
| required: true |
| schema: |
| type: string |
| format: uuid |
| requestBody: |
| content: |
| application/json: |
| schema: |
| type: object |
| properties: |
| group_order: |
| type: array |
| items: |
| type: string |
| description: 分组顺序(可选) |
| example: ["Control", "Treatment"] |
| responses: |
| '200': |
| description: 保存成功 |
| content: |
| application/json: |
| schema: |
| type: object |
| properties: |
| status: |
| type: string |
| message: |
| type: string |
| next_url: |
| type: string |
| '400': |
| description: 项目没有活动数据文件 |
| '404': |
| description: 项目不存在 |
|
|
| /projects/{project_id}/data/{file_id}/select/: |
| post: |
| tags: |
| - 数据管理 |
| summary: 选择活动数据文件 |
| description: 将指定的数据文件设置为当前活动文件 |
| operationId: selectDataFile |
| security: |
| - TokenAuth: [] |
| parameters: |
| - name: project_id |
| in: path |
| required: true |
| schema: |
| type: string |
| format: uuid |
| - name: file_id |
| in: path |
| required: true |
| schema: |
| type: integer |
| responses: |
| '200': |
| description: 设置成功 |
| content: |
| application/json: |
| schema: |
| type: object |
| properties: |
| status: |
| type: string |
| message: |
| type: string |
| active_file: |
| $ref: '#/components/schemas/DataFile' |
| '404': |
| description: 项目或文件不存在 |
|
|
| /projects/{project_id}/data/{file_id}/update/: |
| post: |
| tags: |
| - 数据管理 |
| summary: 更新数据文件 |
| description: 更新数据文件的波数范围 |
| operationId: updateDataFile |
| security: |
| - TokenAuth: [] |
| parameters: |
| - name: project_id |
| in: path |
| required: true |
| schema: |
| type: string |
| format: uuid |
| - name: file_id |
| in: path |
| required: true |
| schema: |
| type: integer |
| requestBody: |
| content: |
| application/json: |
| schema: |
| type: object |
| properties: |
| wavenumber_range: |
| type: string |
| description: 波数范围,格式为"最小值,最大值" |
| example: "500,3150" |
| responses: |
| '200': |
| description: 更新成功 |
| content: |
| application/json: |
| schema: |
| type: object |
| properties: |
| status: |
| type: string |
| message: |
| type: string |
| data_file: |
| $ref: '#/components/schemas/DataFile' |
| '400': |
| description: 波数范围格式无效 |
| '404': |
| description: 项目或文件不存在 |
|
|
| /projects/{project_id}/data/{file_id}/delete/: |
| delete: |
| tags: |
| - 数据管理 |
| summary: 删除数据文件 |
| description: 删除指定的数据文件 |
| operationId: deleteDataFile |
| security: |
| - TokenAuth: [] |
| parameters: |
| - name: project_id |
| in: path |
| required: true |
| schema: |
| type: string |
| format: uuid |
| - name: file_id |
| in: path |
| required: true |
| schema: |
| type: integer |
| responses: |
| '200': |
| description: 删除成功 |
| content: |
| application/json: |
| schema: |
| type: object |
| properties: |
| status: |
| type: string |
| message: |
| type: string |
| '404': |
| description: 项目或文件不存在 |
|
|
| /projects/{project_id}/preprocessing/status/: |
| get: |
| tags: |
| - 数据预处理 |
| summary: 获取预处理状态 |
| description: 获取项目的最新预处理任务状态 |
| operationId: getPreprocessingStatus |
| security: |
| - TokenAuth: [] |
| parameters: |
| - name: project_id |
| in: path |
| required: true |
| schema: |
| type: string |
| format: uuid |
| responses: |
| '200': |
| description: 成功获取状态 |
| content: |
| application/json: |
| schema: |
| type: object |
| properties: |
| status: |
| type: string |
| enum: [not_started, processing, completed, error] |
| parameters: |
| type: object |
| description: 预处理参数 |
| result: |
| type: object |
| description: 预处理结果 |
| '404': |
| description: 项目不存在 |
|
|
| /projects/{project_id}/preprocessing/: |
| post: |
| tags: |
| - 数据预处理 |
| summary: 执行数据预处理 |
| description: | |
| 对拉曼光谱数据执行预处理操作。 |
| |
| 预处理包括: |
| - 质量控制(异常值检测) |
| - 峰值去除(宇宙射线) |
| - 平滑处理 |
| - 标准化 |
| - 基线校正 |
| operationId: runPreprocessing |
| security: |
| - TokenAuth: [] |
| parameters: |
| - name: project_id |
| in: path |
| required: true |
| schema: |
| type: string |
| format: uuid |
| requestBody: |
| required: true |
| content: |
| application/json: |
| schema: |
| type: object |
| properties: |
| quality_control: |
| type: object |
| description: 质量控制参数 |
| properties: |
| euclidean_distance: |
| type: object |
| properties: |
| enabled: |
| type: boolean |
| max_distance: |
| type: number |
| snr: |
| type: object |
| properties: |
| enabled: |
| type: boolean |
| strictness: |
| type: string |
| enum: [low, medium, high] |
| spike_removal: |
| type: object |
| description: 峰值去除参数 |
| properties: |
| enabled: |
| type: boolean |
| intensity: |
| type: number |
| smoothing: |
| type: object |
| description: 平滑处理参数 |
| properties: |
| method: |
| type: string |
| enum: [savitzky_golay, whittaker, moving_average] |
| window_size: |
| type: integer |
| normalization: |
| type: object |
| description: 标准化参数 |
| properties: |
| method: |
| type: string |
| enum: [minmax, zscore, vector, area] |
| baseline_correction: |
| type: object |
| description: 基线校正参数 |
| properties: |
| method: |
| type: string |
| enum: [polynomial, als] |
| degree: |
| type: integer |
| responses: |
| '200': |
| description: 预处理完成 |
| content: |
| application/json: |
| schema: |
| type: object |
| properties: |
| status: |
| type: string |
| message: |
| type: string |
| plot_url: |
| type: string |
| description: 预处理结果图表URL |
| result: |
| type: object |
| '400': |
| description: 项目状态不适合进行预处理 |
| '404': |
| description: 项目不存在 |
| '500': |
| description: 预处理执行失败 |
|
|
| /projects/{project_id}/preprocessing/export/: |
| get: |
| tags: |
| - 数据预处理 |
| summary: 导出预处理数据 |
| description: 下载预处理后的RDS数据文件 |
| operationId: exportPreprocessing |
| security: |
| - TokenAuth: [] |
| parameters: |
| - name: project_id |
| in: path |
| required: true |
| schema: |
| type: string |
| format: uuid |
| responses: |
| '200': |
| description: 文件下载 |
| content: |
| application/octet-stream: |
| schema: |
| type: string |
| format: binary |
| '404': |
| description: 项目或文件不存在 |
|
|
| /projects/{project_id}/meta-free/status/: |
| get: |
| tags: |
| - 无元数据分析 |
| summary: 获取无元数据分析状态 |
| description: 获取项目的最新无元数据分析任务状态 |
| operationId: getMetaFreeStatus |
| security: |
| - TokenAuth: [] |
| parameters: |
| - name: project_id |
| in: path |
| required: true |
| schema: |
| type: string |
| format: uuid |
| responses: |
| '200': |
| description: 成功获取状态 |
| '404': |
| description: 项目不存在 |
|
|
| /projects/{project_id}/meta-free/: |
| post: |
| tags: |
| - 无元数据分析 |
| summary: 执行无元数据分析 |
| description: | |
| 执行不依赖外部元数据的分析方法。 |
| |
| 支持的分析方法: |
| - 降维分析(PCA、LDA、ICA) |
| - 聚类分析(K-means、层次聚类) |
| - 多维度尺度分析(MDS) |
| - 光谱分解(NMF) |
| - 峰值检测和分析 |
| operationId: runMetaFreeAnalysis |
| security: |
| - TokenAuth: [] |
| parameters: |
| - name: project_id |
| in: path |
| required: true |
| schema: |
| type: string |
| format: uuid |
| requestBody: |
| required: true |
| content: |
| application/json: |
| schema: |
| type: object |
| properties: |
| analysis_methods: |
| type: array |
| items: |
| type: string |
| enum: [pca, lda, ica, kmeans, hierarchical, mds, nmf, peak_detection] |
| description: 要执行的分析方法列表 |
| parameters: |
| type: object |
| description: 各分析方法的参数 |
| properties: |
| pca: |
| type: object |
| properties: |
| n_components: |
| type: integer |
| description: 主成分数量 |
| lda: |
| type: object |
| properties: |
| n_components: |
| type: integer |
| kmeans: |
| type: object |
| properties: |
| n_clusters: |
| type: integer |
| description: 聚类数量 |
| responses: |
| '200': |
| description: 分析完成 |
| content: |
| application/json: |
| schema: |
| type: object |
| properties: |
| status: |
| type: string |
| message: |
| type: string |
| result: |
| type: object |
| '400': |
| description: 项目状态不适合进行分析 |
| '404': |
| description: 项目不存在 |
| '500': |
| description: 分析执行失败 |
|
|
| /projects/{project_id}/meta-free/results/: |
| get: |
| tags: |
| - 无元数据分析 |
| summary: 获取无元数据分析结果 |
| description: 获取无元数据分析的结果数据 |
| operationId: getMetaFreeResults |
| security: |
| - TokenAuth: [] |
| parameters: |
| - name: project_id |
| in: path |
| required: true |
| schema: |
| type: string |
| format: uuid |
| responses: |
| '200': |
| description: 成功获取结果 |
| content: |
| application/json: |
| schema: |
| type: object |
| '404': |
| description: 项目不存在或无结果 |
|
|
| /projects/{project_id}/meta-free/export/: |
| get: |
| tags: |
| - 无元数据分析 |
| summary: 导出无元数据分析结果 |
| description: 下载无元数据分析结果文件 |
| operationId: exportMetaFreeResults |
| security: |
| - TokenAuth: [] |
| parameters: |
| - name: project_id |
| in: path |
| required: true |
| schema: |
| type: string |
| format: uuid |
| - name: format |
| in: query |
| description: 导出格式 |
| schema: |
| type: string |
| enum: [png, svg, pdf, csv, rds] |
| responses: |
| '200': |
| description: 文件下载 |
| content: |
| application/octet-stream: |
| schema: |
| type: string |
| format: binary |
| '404': |
| description: 项目或结果不存在 |
|
|
| /projects/{project_id}/meta-based/status/: |
| get: |
| tags: |
| - 基于元数据分析 |
| summary: 获取基于元数据分析状态 |
| description: 获取项目的最新基于元数据分析任务状态 |
| operationId: getMetaBasedStatus |
| security: |
| - TokenAuth: [] |
| parameters: |
| - name: project_id |
| in: path |
| required: true |
| schema: |
| type: string |
| format: uuid |
| responses: |
| '200': |
| description: 成功获取状态 |
| '404': |
| description: 项目不存在 |
|
|
| /projects/{project_id}/meta-based/: |
| post: |
| tags: |
| - 基于元数据分析 |
| summary: 执行基于元数据分析 |
| description: | |
| 执行基于元数据的高级分析方法。 |
| |
| 支持的分析方法: |
| - 分类分析(SVM、随机森林、逻辑回归) |
| - 回归分析(线性回归、PLSR) |
| - 统计检验(ANOVA、多重比较、非参数检验) |
| - 生物标志物发现 |
| operationId: runMetaBasedAnalysis |
| security: |
| - TokenAuth: [] |
| parameters: |
| - name: project_id |
| in: path |
| required: true |
| schema: |
| type: string |
| format: uuid |
| requestBody: |
| required: true |
| content: |
| multipart/form-data: |
| schema: |
| type: object |
| properties: |
| metadata_file: |
| type: string |
| format: binary |
| description: 元数据CSV文件 |
| analysis_methods: |
| type: string |
| description: 分析方法列表(JSON字符串) |
| parameters: |
| type: string |
| description: 分析参数(JSON字符串) |
| responses: |
| '200': |
| description: 分析完成 |
| content: |
| application/json: |
| schema: |
| type: object |
| properties: |
| status: |
| type: string |
| message: |
| type: string |
| result: |
| type: object |
| '400': |
| description: 项目状态不适合进行分析或元数据文件格式错误 |
| '404': |
| description: 项目不存在 |
| '500': |
| description: 分析执行失败 |
|
|
| /projects/{project_id}/meta-based/results/: |
| get: |
| tags: |
| - 基于元数据分析 |
| summary: 获取基于元数据分析结果 |
| description: 获取基于元数据分析的结果数据 |
| operationId: getMetaBasedResults |
| security: |
| - TokenAuth: [] |
| parameters: |
| - name: project_id |
| in: path |
| required: true |
| schema: |
| type: string |
| format: uuid |
| responses: |
| '200': |
| description: 成功获取结果 |
| content: |
| application/json: |
| schema: |
| type: object |
| '404': |
| description: 项目不存在或无结果 |
|
|
| /projects/{project_id}/meta-based/export/: |
| get: |
| tags: |
| - 基于元数据分析 |
| summary: 导出基于元数据分析结果 |
| description: 下载基于元数据分析结果文件 |
| operationId: exportMetaBasedResults |
| security: |
| - TokenAuth: [] |
| parameters: |
| - name: project_id |
| in: path |
| required: true |
| schema: |
| type: string |
| format: uuid |
| - name: format |
| in: query |
| description: 导出格式 |
| schema: |
| type: string |
| enum: [png, svg, pdf, csv, excel, rds] |
| responses: |
| '200': |
| description: 文件下载 |
| content: |
| application/octet-stream: |
| schema: |
| type: string |
| format: binary |
| '404': |
| description: 项目或结果不存在 |
|
|
| /projects/{project_id}/results/summary/: |
| get: |
| tags: |
| - 结果管理 |
| summary: 获取结果摘要 |
| description: 获取项目所有分析结果的摘要信息 |
| operationId: getResultsSummary |
| security: |
| - TokenAuth: [] |
| parameters: |
| - name: project_id |
| in: path |
| required: true |
| schema: |
| type: string |
| format: uuid |
| responses: |
| '200': |
| description: 成功获取结果摘要 |
| content: |
| application/json: |
| schema: |
| type: object |
| properties: |
| project_info: |
| $ref: '#/components/schemas/Project' |
| preprocessing_status: |
| type: string |
| meta_free_status: |
| type: string |
| meta_based_status: |
| type: string |
| available_exports: |
| type: array |
| items: |
| type: string |
| '404': |
| description: 项目不存在 |
|
|
| /projects/{project_id}/results/export/: |
| post: |
| tags: |
| - 结果管理 |
| summary: 创建导出任务 |
| description: 创建一个结果导出任务 |
| operationId: createExportTask |
| security: |
| - TokenAuth: [] |
| parameters: |
| - name: project_id |
| in: path |
| required: true |
| schema: |
| type: string |
| format: uuid |
| requestBody: |
| required: true |
| content: |
| application/json: |
| schema: |
| type: object |
| properties: |
| format: |
| type: string |
| enum: [zip, pdf, excel] |
| description: 导出格式 |
| components: |
| type: array |
| items: |
| type: string |
| description: 要导出的组件列表 |
| example: ["preprocessing", "pca", "lda"] |
| responses: |
| '201': |
| description: 导出任务创建成功 |
| content: |
| application/json: |
| schema: |
| type: object |
| properties: |
| export_id: |
| type: string |
| format: uuid |
| status: |
| type: string |
| message: |
| type: string |
| '400': |
| description: 请求参数错误 |
| '404': |
| description: 项目不存在 |
|
|
| /projects/{project_id}/results/export/{export_id}/: |
| get: |
| tags: |
| - 结果管理 |
| summary: 获取导出任务状态 |
| description: 获取指定导出任务的状态和下载链接 |
| operationId: getExportStatus |
| security: |
| - TokenAuth: [] |
| parameters: |
| - name: project_id |
| in: path |
| required: true |
| schema: |
| type: string |
| format: uuid |
| - name: export_id |
| in: path |
| required: true |
| schema: |
| type: string |
| format: uuid |
| responses: |
| '200': |
| description: 成功获取导出状态 |
| content: |
| application/json: |
| schema: |
| type: object |
| properties: |
| status: |
| type: string |
| enum: [pending, processing, completed, error] |
| download_url: |
| type: string |
| description: 下载链接(仅当status为completed时) |
| created_at: |
| type: string |
| format: date-time |
| completed_at: |
| type: string |
| format: date-time |
| '404': |
| description: 项目或导出任务不存在 |
|
|