# 使用curl访问API服务

## 1. 启动服务

首先确保已安装依赖并设置环境变量：

```bash
# 安装依赖
pip install -r requirements.txt

# 设置OpenRouter API密钥（必需）
export OPENROUTER_API_KEY='your-api-key'

# 可选：设置端口（默认8000）
export API_PORT='8000'
```

启动服务：

```bash
python api/main.py
```

服务启动后，你会看到类似输出：
```
INFO:     Started server process
INFO:     Waiting for application startup.
INFO:     Pipeline包装器初始化成功
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8000
```

## 2. 测试健康检查端点

```bash
curl http://localhost:8000/health
```

预期响应：
```json
{
  "status": "healthy",
  "pipeline_initialized": true
}
```

## 3. 发送搜索请求

### 基本请求

```bash
curl -X POST "http://localhost:8000/what/search" \
  -H "Content-Type: application/json" \
  -d '{
    "original_target": "墨镜",
    "persona_features": [
      {"persona_feature_name": "时尚达人"},
      {"persona_feature_name": "潮流穿搭"},
      {"persona_feature_name": "配饰搭配"}
    ],
    "candidate_words": ["太阳镜", "墨镜", "遮阳", "时尚", "潮流"]
  }'
```

### 格式化输出（使用jq）

如果安装了`jq`，可以格式化JSON输出：

```bash
curl -X POST "http://localhost:8000/what/search" \
  -H "Content-Type: application/json" \
  -d '{
    "original_target": "墨镜",
    "persona_features": [
      {"persona_feature_name": "时尚达人"},
      {"persona_feature_name": "潮流穿搭"},
      {"persona_feature_name": "配饰搭配"}
    ],
    "candidate_words": ["太阳镜", "墨镜", "遮阳", "时尚", "潮流"]
  }' | jq '.'
```

### 保存响应到文件

```bash
curl -X POST "http://localhost:8000/what/search" \
  -H "Content-Type: application/json" \
  -d '{
    "original_target": "墨镜",
    "persona_features": [
      {"persona_feature_name": "时尚达人"},
      {"persona_feature_name": "潮流穿搭"},
      {"persona_feature_name": "配饰搭配"}
    ],
    "candidate_words": ["太阳镜", "墨镜", "遮阳", "时尚", "潮流"]
  }' -o response.json
```

### 显示详细请求信息

```bash
curl -v -X POST "http://localhost:8000/search" \
  -H "Content-Type: application/json" \
  -d '{
    "original_target": "墨镜",
    "persona_features": [
      {"persona_feature_name": "时尚达人"},
      {"persona_feature_name": "潮流穿搭"},
      {"persona_feature_name": "配饰搭配"}
    ],
    "candidate_words": ["太阳镜", "墨镜", "遮阳", "时尚", "潮流"]
  }'
```

### 从文件读取请求体

创建请求文件 `request.json`：

```json
{
  "original_target": "墨镜",
  "persona_features": [
    {"persona_feature_name": "时尚达人"},
    {"persona_feature_name": "潮流穿搭"},
    {"persona_feature_name": "配饰搭配"}
  ],
  "candidate_words": ["太阳镜", "墨镜", "遮阳", "时尚", "潮流"]
}
```

然后使用：

```bash
curl -X POST "http://localhost:8000/what/search" \
  -H "Content-Type: application/json" \
  -d @request.json
```

## 4. 完整示例脚本

创建一个测试脚本 `test_api.sh`：

```bash
#!/bin/bash

# 设置变量
API_URL="http://localhost:8000"
ORIGINAL_TARGET="墨镜"

# 测试健康检查
echo "=== 测试健康检查 ==="
curl -s "${API_URL}/health" | jq '.'
echo -e "\n"

# 测试搜索请求
echo "=== 测试搜索请求 ==="
curl -X POST "${API_URL}/search" \
  -H "Content-Type: application/json" \
  -d "{
    \"original_target\": \"${ORIGINAL_TARGET}\",
    \"persona_features\": [
      {\"persona_feature_name\": \"时尚达人\"},
      {\"persona_feature_name\": \"潮流穿搭\"},
      {\"persona_feature_name\": \"配饰搭配\"}
    ],
    \"candidate_words\": [\"太阳镜\", \"墨镜\", \"遮阳\", \"时尚\", \"潮流\"]
  }" | jq '.'
```

运行脚本：

```bash
chmod +x test_api.sh
./test_api.sh
```

## 5. 常见问题

### 连接被拒绝

如果遇到 `Connection refused` 错误：

1. 检查服务是否已启动：
   ```bash
   ps aux | grep "api/main.py"
   ```

2. 检查端口是否被占用：
   ```bash
   lsof -i :8000
   ```

3. 检查防火墙设置

### 500错误

如果返回500错误，检查：

1. OpenRouter API密钥是否设置：
   ```bash
   echo $OPENROUTER_API_KEY
   ```

2. 查看服务日志中的错误信息

### 400错误

如果返回400错误，检查：

1. JSON格式是否正确
2. 必需字段是否都已提供
3. 字段值是否符合要求（不能为空等）

## 6. 查看API文档

启动服务后，可以在浏览器中访问：

- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc

这些页面提供了交互式的API文档，可以直接在浏览器中测试API。

