Skip to main content
Glama
leeguooooo
by leeguooooo
HTTP_API_QUICK_START.md6.25 kB
# 🚀 HTTP API 方案快速开始 **正确的架构**: Python HTTP 服务 + n8n HTTP Request ## ⚡ 3 步部署 ### 1. 启动 Python API 服务 ```bash # 开发环境 - 自动重载 uv run python scripts/email_monitor_api.py # 或使用 uvicorn (推荐) uv run uvicorn scripts.email_monitor_api:app --reload --host 0.0.0.0 --port 18888 ``` **服务启动后**: - API 地址: `http://localhost:18888` - 健康检查: `http://localhost:18888/health` - API 文档: `http://localhost:18888/docs` ### 2. 测试 API ```bash # 健康检查 curl http://localhost:18888/health # 测试邮件检查 curl -X POST http://localhost:18888/api/check-emails # 测试通知 curl -X POST http://localhost:18888/api/test-notification ``` ### 3. 部署 n8n 工作流 ```bash # 使用新的 HTTP 工作流 export N8N_API_KEY="your_key" uv run python -c " import json, sys sys.path.insert(0, '.') from scripts.setup_n8n_workflow import N8NWorkflowManager import os manager = N8NWorkflowManager( os.getenv('N8N_URL', 'https://n8n.ifoodme.com'), os.getenv('N8N_API_KEY') ) # 导入新的 HTTP 工作流 with open('n8n/email_monitoring_http_workflow.json') as f: workflow = json.load(f) result = manager.create_workflow(workflow) print(f'✅ 工作流已创建: {result[\"id\"]}') print(f'URL: https://n8n.ifoodme.com/workflow/{result[\"id\"]}') " ``` ## 📊 架构图 ``` ┌─────────────────┐ │ n8n 云服务 │ │ (定时触发) │ └────────┬────────┘ │ HTTP Request ↓ ┌─────────────────┐ │ FastAPI Service│ ← 你的服务器 │ (Port 8000) │ └────────┬────────┘ │ 调用 ↓ ┌─────────────────┐ │ Python MCP │ │ (邮件处理) │ └─────────────────┘ │ 返回结果 ↓ ┌─────────────────┐ │ n8n 接收 │ │ (发送飞书通知) │ └─────────────────┘ ``` ## 🔧 配置 n8n 工作流 在 n8n 中你会看到: 1. **定时触发** - 每5分钟运行 2. **调用邮件检查API** - HTTP Request 到 `http://localhost:8000/api/check-emails` 3. **检查结果** - 判断是否有重要邮件 4. **发送飞书通知** - 如果有重要邮件 ### 修改 API 地址 在 n8n 工作流的"调用邮件检查API"节点中,将 URL 改为: - **本地测试**: `http://localhost:18888/api/check-emails` - **服务器部署**: `http://your-server-ip:18888/api/check-emails` - **域名部署**: `https://api.yourdomain.com/api/check-emails` ## 🏭 生产部署 ### 选项 1: systemd 服务 ```bash # 创建服务文件 sudo tee /etc/systemd/system/email-monitor-api.service <<EOF [Unit] Description=Email Monitor API Service After=network.target [Service] Type=simple User=your-user WorkingDirectory=/path/to/mcp-email-service Environment="PATH=/path/to/.venv/bin" ExecStart=/path/to/.venv/bin/uvicorn scripts.email_monitor_api:app --host 0.0.0.0 --port 18888 Restart=always [Install] WantedBy=multi-user.target EOF # 启动服务 sudo systemctl enable email-monitor-api sudo systemctl start email-monitor-api sudo systemctl status email-monitor-api ``` ### 选项 2: Docker 部署 ```dockerfile # Dockerfile FROM python:3.11-slim WORKDIR /app COPY . /app RUN pip install uv && \\ uv sync EXPOSE 18888 CMD ["uv", "run", "uvicorn", "scripts.email_monitor_api:app", "--host", "0.0.0.0", "--port", "18888"] ``` ```bash # 构建和运行 docker build -t email-monitor-api . docker run -d -p 18888:18888 --name email-api email-monitor-api ``` ### 选项 3: Nginx 反向代理 ```nginx server { listen 80; server_name api.yourdomain.com; location / { proxy_pass http://localhost:18888; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ``` ## 📝 API 接口文档 ### POST /api/check-emails 检查邮件并返回重要邮件 **响应示例**: ```json { "success": true, "message": "Monitoring cycle completed successfully", "stats": { "fetched_emails": 20, "important_emails": 3, "notifications_sent": 1 }, "important_emails": [ { "from": "boss@company.com", "subject": "Urgent: Project Deadline", "priority_score": 0.9 } ], "notification": { "msg_type": "interactive", "card": { ... } } } ``` ### GET /health 健康检查 **响应**: ```json { "status": "healthy", "service": "email-monitor-api" } ``` ### POST /api/test-notification 测试通知(不实际检查邮件) ## 🔒 安全建议 ### 1. 添加 API 认证 ```python from fastapi import Header, HTTPException API_KEY = os.getenv("API_KEY", "your-secret-key") async def verify_api_key(x_api_key: str = Header()): if x_api_key != API_KEY: raise HTTPException(status_code=401, detail="Invalid API Key") return x_api_key # 在路由中使用 @app.post("/api/check-emails", dependencies=[Depends(verify_api_key)]) async def check_emails(): ... ``` ### 2. 使用 HTTPS ```bash # 使用 Let's Encrypt sudo certbot --nginx -d api.yourdomain.com ``` ### 3. 限流 ```python from slowapi import Limiter from slowapi.util import get_remote_address limiter = Limiter(key_func=get_remote_address) app.state.limiter = limiter @app.post("/api/check-emails") @limiter.limit("10/minute") async def check_emails(request: Request): ... ``` ## 🎯 优势对比 | 特性 | Execute Command | HTTP API | |------|-----------------|----------| | n8n 兼容性 | 仅自建版 | ✅ 所有版本 | | 部署复杂度 | 高(容器配置) | ✅ 低(独立服务) | | 可扩展性 | 低 | ✅ 高 | | 监控调试 | 困难 | ✅ 简单 | | Python 依赖 | 需要容器内安装 | ✅ 独立管理 | | 代码修改 | 无需 | ✅ 无需 | ## ✅ 现在可以 1. **本地测试**: 启动 API + 在 n8n 中测试 2. **生产部署**: systemd/Docker + 配置域名 3. **开始使用**: 激活 n8n 工作流 **Python 代码完全不用改,只是加了个 HTTP 接口!** 🎉

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/leeguooooo/email-mcp-service'

If you have feedback or need assistance with the MCP directory API, please join our Discord server