# API 文档

## 概述

低代码智能体平台提供RESTful API和WebSocket API，支持工作流管理、执行管理、数据源管理等功能。

**Base URL**: `http://localhost:8037` 或 `http://101.43.95.130:8037`

**API版本**: v1

**文档地址**:
- Swagger UI: `http://localhost:8037/docs`
- ReDoc: `http://localhost:8037/redoc`

## 认证

大部分API需要JWT认证。认证流程：

1. 用户注册或登录获取token
2. 在请求头中添加：`Authorization: Bearer <token>`

### 获取Token

```http
POST /api/v1/auth/login
Content-Type: application/x-www-form-urlencoded

username=your_username&password=your_password
```

**响应**:
```json
{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "token_type": "bearer"
}
```

## API端点

### 认证API (`/api/v1/auth`)

#### 用户注册
```http
POST /api/v1/auth/register
Content-Type: application/json

{
  "username": "testuser",
  "email": "test@example.com",
  "password": "password123"
}
```

**响应**: 201 Created
```json
{
  "id": "uuid",
  "username": "testuser",
  "email": "test@example.com",
  "role": "user",
  "created_at": "2024-01-01T00:00:00"
}
```

#### 用户登录
```http
POST /api/v1/auth/login
Content-Type: application/x-www-form-urlencoded

username=testuser&password=password123
```

**响应**: 200 OK
```json
{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "token_type": "bearer"
}
```

#### 获取当前用户信息
```http
GET /api/v1/auth/me
Authorization: Bearer <token>
```

**响应**: 200 OK
```json
{
  "id": "uuid",
  "username": "testuser",
  "email": "test@example.com",
  "role": "user"
}
```

### 工作流API (`/api/v1/workflows`)

#### 获取工作流列表
```http
GET /api/v1/workflows?skip=0&limit=10&search=关键词&status=draft&sort_by=created_at&sort_order=desc
Authorization: Bearer <token>
```

**查询参数**:
- `skip`: 跳过记录数（分页，默认0）
- `limit`: 每页记录数（默认100，最大100）
- `search`: 搜索关键词（按名称或描述搜索）
- `status`: 状态筛选（draft/published/running/stopped）
- `sort_by`: 排序字段（name/created_at/updated_at）
- `sort_order`: 排序方向（asc/desc）

**响应**: 200 OK
```json
[
  {
    "id": "uuid",
    "name": "工作流名称",
    "description": "描述",
    "nodes": [...],
    "edges": [...],
    "version": 1,
    "status": "draft",
    "created_at": "2024-01-01T00:00:00"
  }
]
```

#### 创建工作流
```http
POST /api/v1/workflows
Authorization: Bearer <token>
Content-Type: application/json

{
  "name": "工作流名称",
  "description": "描述",
  "nodes": [
    {
      "id": "start-1",
      "type": "start",
      "position": {"x": 0, "y": 0},
      "data": {"label": "开始"}
    }
  ],
  "edges": []
}
```

**响应**: 201 Created

#### 获取工作流详情
```http
GET /api/v1/workflows/{workflow_id}
Authorization: Bearer <token>
```

**响应**: 200 OK

#### 更新工作流
```http
PUT /api/v1/workflows/{workflow_id}
Authorization: Bearer <token>
Content-Type: application/json

{
  "name": "更新后的名称",
  "description": "更新后的描述",
  "nodes": [...],
  "edges": [...]
}
```

**响应**: 200 OK

#### 删除工作流
```http
DELETE /api/v1/workflows/{workflow_id}
Authorization: Bearer <token>
```

**响应**: 200 OK
```json
{
  "message": "工作流已删除"
}
```

#### 执行工作流
```http
POST /api/v1/workflows/{workflow_id}/execute
Authorization: Bearer <token>
Content-Type: application/json

{
  "input_data": {
    "key": "value"
  }
}
```

**响应**: 201 Created
```json
{
  "id": "execution_id",
  "workflow_id": "workflow_id",
  "status": "pending",
  "task_id": "celery_task_id"
}
```

#### 验证工作流
```http
POST /api/v1/workflows/validate
Authorization: Bearer <token>
Content-Type: application/json

{
  "name": "工作流名称",
  "nodes": [...],
  "edges": [...]
}
```

**响应**: 200 OK
```json
{
  "valid": true,
  "errors": [],
  "warnings": []
}
```

#### 获取工作流模板列表
```http
GET /api/v1/workflows/templates
Authorization: Bearer <token>
```

#### 从模板创建工作流
```http
POST /api/v1/workflows/templates/{template_id}/create?name=工作流名称&description=描述
Authorization: Bearer <token>
```

#### 导出工作流
```http
GET /api/v1/workflows/{workflow_id}/export
Authorization: Bearer <token>
```

**响应**: 200 OK
```json
{
  "workflow": {...},
  "exported_at": "2024-01-01T00:00:00"
}
```

#### 导入工作流
```http
POST /api/v1/workflows/import
Authorization: Bearer <token>
Content-Type: application/json

{
  "workflow": {...}
}
```

#### 获取工作流版本列表
```http
GET /api/v1/workflows/{workflow_id}/versions
Authorization: Bearer <token>
```

#### 获取工作流版本详情
```http
GET /api/v1/workflows/{workflow_id}/versions/{version}
Authorization: Bearer <token>
```

#### 回滚工作流版本
```http
POST /api/v1/workflows/{workflow_id}/versions/{version}/rollback
Authorization: Bearer <token>
Content-Type: application/json

{
  "comment": "回滚原因"
}
```

### 执行管理API (`/api/v1/executions`)

#### 创建执行任务
```http
POST /api/v1/executions
Authorization: Bearer <token>
Content-Type: application/json

{
  "workflow_id": "workflow_id",
  "input_data": {
    "key": "value"
  }
}
```

**响应**: 201 Created

#### 获取执行记录列表
```http
GET /api/v1/executions?skip=0&limit=10&workflow_id=uuid&status=completed&search=关键词
Authorization: Bearer <token>
```

**查询参数**:
- `skip`: 跳过记录数（分页）
- `limit`: 每页记录数（最大100）
- `workflow_id`: 工作流ID筛选
- `status`: 状态筛选（pending/running/completed/failed）
- `search`: 搜索关键词

**响应**: 200 OK
```json
[
  {
    "id": "uuid",
    "workflow_id": "uuid",
    "status": "completed",
    "input_data": {...},
    "output_data": {...},
    "execution_time": 1234,
    "created_at": "2024-01-01T00:00:00"
  }
]
```

#### 获取执行详情
```http
GET /api/v1/executions/{execution_id}
Authorization: Bearer <token>
```

**响应**: 200 OK

#### 获取执行状态
```http
GET /api/v1/executions/{execution_id}/status
Authorization: Bearer <token>
```

**响应**: 200 OK
```json
{
  "status": "running",
  "progress": 50,
  "current_node": "llm-1"
}
```

### 执行日志API (`/api/v1/execution-logs`)

#### 获取执行日志
```http
GET /api/v1/execution-logs/executions/{execution_id}?level=info&node_id=node-1&skip=0&limit=100
Authorization: Bearer <token>
```

**查询参数**:
- `level`: 日志级别筛选（info/warn/error/debug）
- `node_id`: 节点ID筛选
- `skip`: 跳过记录数
- `limit`: 每页记录数

**响应**: 200 OK
```json
{
  "logs": [
    {
      "id": "uuid",
      "node_id": "node-1",
      "node_type": "llm",
      "level": "info",
      "message": "节点开始执行",
      "timestamp": "2024-01-01T00:00:00",
      "duration_ms": 1234
    }
  ],
  "total": 100,
  "skip": 0,
  "limit": 100
}
```

#### 获取执行日志摘要
```http
GET /api/v1/execution-logs/executions/{execution_id}/summary
Authorization: Bearer <token>
```

**响应**: 200 OK
```json
{
  "total_logs": 100,
  "level_stats": {
    "info": 80,
    "warn": 10,
    "error": 5,
    "debug": 5
  },
  "node_stats": [
    {
      "node_id": "node-1",
      "node_type": "llm",
      "log_count": 10,
      "total_duration_ms": 5000
    }
  ],
  "error_logs": [...]
}
```

### 数据源API (`/api/v1/data-sources`)

#### 获取数据源列表
```http
GET /api/v1/data-sources?skip=0&limit=10&type=mysql&status=active
Authorization: Bearer <token>
```

#### 创建数据源
```http
POST /api/v1/data-sources
Authorization: Bearer <token>
Content-Type: application/json

{
  "name": "MySQL数据源",
  "type": "mysql",
  "description": "描述",
  "config": {
    "host": "localhost",
    "port": 3306,
    "database": "test",
    "username": "user",
    "password": "password"
  }
}
```

#### 获取数据源详情
```http
GET /api/v1/data-sources/{data_source_id}
Authorization: Bearer <token>
```

#### 更新数据源
```http
PUT /api/v1/data-sources/{data_source_id}
Authorization: Bearer <token>
Content-Type: application/json

{
  "name": "更新后的名称",
  "config": {...}
}
```

#### 删除数据源
```http
DELETE /api/v1/data-sources/{data_source_id}
Authorization: Bearer <token>
```

#### 测试数据源连接
```http
POST /api/v1/data-sources/{data_source_id}/test
Authorization: Bearer <token>
```

**响应**: 200 OK
```json
{
  "status": "success",
  "message": "连接成功"
}
```

#### 查询数据源数据
```http
POST /api/v1/data-sources/{data_source_id}/query
Authorization: Bearer <token>
Content-Type: application/json

{
  "query": "SELECT * FROM table LIMIT 10"
}
```

**响应**: 200 OK
```json
{
  "data": [...],
  "count": 10
}
```

### WebSocket API

#### 连接WebSocket
```javascript
const ws = new WebSocket('ws://localhost:8037/api/v1/ws/executions/{execution_id}?token=<token>');
```

#### 接收消息
```json
{
  "type": "status",
  "data": {
    "status": "running",
    "progress": 50,
    "current_node": "llm-1"
  }
}
```

## 错误码

| 状态码 | 说明 |
|--------|------|
| 200 | 成功 |
| 201 | 创建成功 |
| 400 | 请求参数错误 |
| 401 | 未授权（需要登录） |
| 403 | 禁止访问（权限不足） |
| 404 | 资源不存在 |
| 422 | 验证错误 |
| 500 | 服务器内部错误 |

## 错误响应格式

```json
{
  "detail": "错误描述",
  "error_code": "ERROR_CODE",
  "status_code": 400
}
```

## 节点类型

### 支持的节点类型

- `start` - 开始节点
- `input` - 输入节点
- `llm` - LLM节点（调用AI模型）
- `condition` - 条件节点（条件判断）
- `transform` - 转换节点（数据转换）
- `loop` - 循环节点（循环处理）
- `agent` - Agent节点（执行智能Agent）
- `output` - 输出节点
- `end` - 结束节点

### LLM节点配置

```json
{
  "id": "llm-1",
  "type": "llm",
  "data": {
    "provider": "deepseek",
    "model": "deepseek-chat",
    "prompt": "请回答：{input}",
    "temperature": 0.7,
    "max_tokens": 1000
  }
}
```

### 条件节点配置

```json
{
  "id": "condition-1",
  "type": "condition",
  "data": {
    "expression": "{value} > 10"
  }
}
```

### 循环节点配置

```json
{
  "id": "loop-1",
  "type": "loop",
  "data": {
    "items_path": "items",
    "item_variable": "item",
    "error_handling": "continue"
  }
}
```

## 数据源类型

支持的数据源类型：

- `mysql` - MySQL数据库
- `postgresql` - PostgreSQL数据库
- `api` - RESTful API
- `json` - JSON文件

## 示例

### 完整工作流示例

```json
{
  "name": "文本处理工作流",
  "description": "处理用户输入的文本",
  "nodes": [
    {
      "id": "start-1",
      "type": "start",
      "position": {"x": 0, "y": 0},
      "data": {"label": "开始"}
    },
    {
      "id": "llm-1",
      "type": "llm",
      "position": {"x": 200, "y": 0},
      "data": {
        "label": "LLM处理",
        "provider": "deepseek",
        "model": "deepseek-chat",
        "prompt": "请总结以下文本：{input}"
      }
    },
    {
      "id": "end-1",
      "type": "end",
      "position": {"x": 400, "y": 0},
      "data": {"label": "结束"}
    }
  ],
  "edges": [
    {
      "id": "e1",
      "source": "start-1",
      "target": "llm-1"
    },
    {
      "id": "e2",
      "source": "llm-1",
      "target": "end-1"
    }
  ]
}
```

## 更多信息

详细的API文档请访问：
- Swagger UI: `http://localhost:8037/docs`
- ReDoc: `http://localhost:8037/redoc`
