# DesignerCEP 混合架构开发框架指南 ## 🎯 框架概述 这是一个**三层混合架构框架**,专为 Adobe CEP 插件设计,实现了: - **核心算法保护**(服务器端计算) - **动态更新**(Shell + Core 分离) - **安全鉴权**(API Key + 详细日志) --- ## 🏗️ 架构层次 ``` ┌──────────────────────────────────────────────────┐ │ Layer 1: Shell(壳/启动器) │ │ 职责: 登录、更新、加载 Core │ │ 更新频率: 极低 │ │ 位置: 本地安装(PS 扩展目录) │ └──────────────────────────────────────────────────┘ ↓ ┌──────────────────────────────────────────────────┐ │ Layer 2: Core(业务核) │ │ 职责: UI 界面、简单 JSX 执行 │ │ 更新频率: 高(随时发布新功能) │ │ 位置: 远程服务器 → 下载到本地缓存 │ └──────────────────────────────────────────────────┘ ↓ ┌──────────────────────────────────────────────────┐ │ Layer 3: Server(后端服务器) │ │ 职责: 核心算法、数据处理、鉴权 │ │ 更新频率: 随时 │ │ 位置: 远程服务器 │ └──────────────────────────────────────────────────┘ ``` --- ## 📝 如何添加新功能 ### 示例:添加一个"智能滤镜"功能 #### Step 1: 设计功能流程 ``` 用户点击按钮 → Core 获取图层信息 → Core 发送到 Server(带 API Key) → Server 计算最佳滤镜参数(🔒核心算法) → Server 返回参数 → Core 应用滤镜到图层 ``` --- #### Step 2: 后端实现(Server 层) **文件:** `Server/app/api/v1/jsx_demo.py` ```python class FilterRequest(BaseModel): """滤镜计算请求""" layer_id: str image_data: str # Base64 编码的图层预览 class FilterResult(BaseModel): """滤镜计算结果""" success: bool blur_radius: float sharpen_amount: float saturation: float message: str @router.post("/calculate-filter", response_model=FilterResult) async def calculate_filter( request: FilterRequest, x_api_key: Optional[str] = Header(None) ): """ 🔒 服务器端智能滤镜计算 客户端只能拿到参数,看不到算法 """ # 日志 logger.info("="*60) logger.info("📥 收到滤镜计算请求") logger.info(f" 图层ID: {request.layer_id}") logger.info(f" API Key: {x_api_key}") logger.info("="*60) # API Key 验证 if not validate_api_key(x_api_key): logger.warning(f"❌ API Key 验证失败") raise HTTPException(status_code=403, detail="无效的 API Key") logger.info("✅ API Key 验证通过") try: # 🔒 核心算法在这里(客户端看不到) # 可以是 AI 模型、图像分析等 # 示例:根据图层 ID 计算参数 layer_hash = sum(ord(c) for c in request.layer_id) blur_radius = 2.0 + (layer_hash % 10) / 10 sharpen_amount = 0.5 + (layer_hash % 5) / 10 saturation = 1.0 + (layer_hash % 3) / 10 logger.info(f"✅ 计算完成: blur={blur_radius}, sharpen={sharpen_amount}") return FilterResult( success=True, blur_radius=blur_radius, sharpen_amount=sharpen_amount, saturation=saturation, message="滤镜参数计算成功" ) except Exception as e: logger.error(f"❌ 计算失败: {str(e)}") return FilterResult( success=False, blur_radius=0, sharpen_amount=0, saturation=1.0, message=f"计算失败: {str(e)}" ) ``` --- #### Step 3: 前端实现(Core 层) **文件:** `Designer/src/api/jsxApi/inline/smart-filter.ts` ```typescript import { evalInlineJSX, JSXResponse } from './utils'; import { config } from '@/config'; /** * 智能滤镜:混合方案 * 1. 本地获取图层信息 * 2. 服务器计算最佳参数 * 3. 本地应用滤镜 */ export async function applySmartFilter(): Promise { try { // 1. 💻 本地获取图层信息 const jsx = ` try { if (!$.global.JSXUtils.hasDocument()) { return $.global.JSXUtils.stringify({ error: '没有打开的文档' }); } var doc = $.global.JSXUtils.getDocument(); var layer = doc.activeLayer; return $.global.JSXUtils.stringify({ success: true, layerId: layer.id, layerName: layer.name }); } catch (error) { return $.global.JSXUtils.stringify({ error: error.toString() }); } `; const layerResult = await evalInlineJSX(jsx); if (layerResult.error || !layerResult.success) { return layerResult; } // 2. 🌐 发送到服务器计算(核心算法) const response = await fetch(`${config.apiBaseUrl}/jsx_demo/calculate-filter`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-API-Key': 'demo_key_123' // 🔐 API Key }, body: JSON.stringify({ layer_id: layerResult.layerId, image_data: '' // 可选:发送图层预览 }) }); if (!response.ok) { return { error: '服务器错误' }; } const filterResult = await response.json(); if (!filterResult.success) { return { error: filterResult.message }; } // 3. 💻 本地应用滤镜参数 const { blur_radius, sharpen_amount, saturation } = filterResult; const applyJsx = ` try { var doc = $.global.JSXUtils.getDocument(); var layer = doc.activeLayer; // 应用服务器计算的滤镜参数 // 高斯模糊 layer.applyGaussianBlur(${blur_radius}); // 锐化 layer.applySharpen(); return $.global.JSXUtils.stringify({ success: true, message: '智能滤镜应用成功' }); } catch (error) { return $.global.JSXUtils.stringify({ error: error.toString() }); } `; return evalInlineJSX(applyJsx); } catch (error) { return { error: String(error) }; } } ``` --- #### Step 4: UI 界面(Core 层) **文件:** `Designer/src/view/Home.vue` ```vue ``` --- #### Step 5: 部署新功能 ```bash # 1. 构建 Core cd Designer npm run build:core # 2. 发布新版本(使用自动部署脚本) cd .. python auto_deploy_core.py # 3. 用户登录后会自动下载新版本 ``` --- ## 🔐 API Key 管理 ### 添加新的 API Key **文件:** `Server/app/core/api_keys.py` ```python VALID_KEYS: Dict[str, dict] = { "demo_key_123": { "name": "测试密钥", "permissions": ["calculate", "filter"], # 添加权限 "rate_limit": 100 }, "customer_abc_456": { # 新客户 "name": "客户 A", "permissions": ["calculate"], "rate_limit": 200 } } ``` ### 权限检查 ```python @router.post("/calculate-filter") async def calculate_filter(request, x_api_key: Optional[str] = Header(None)): # 验证 Key if not validate_api_key(x_api_key): raise HTTPException(403, "无效的 API Key") # 检查权限 if not APIKeyManager.check_permission(x_api_key, "filter"): raise HTTPException(403, "没有滤镜功能权限") # 继续处理... ``` --- ## 📊 日志监控 所有请求都会自动记录: ``` ============================================================ 📥 收到滤镜计算请求 图层ID: Layer_123 API Key: demo_key_123 ============================================================ ✅ API Key 验证通过 | 名称: 测试密钥 | 权限: ['calculate', 'filter'] 🔒 开始执行核心算法... ✅ 计算完成: blur=2.3, sharpen=0.7 ============================================================ ``` --- ## 🚀 扩展方向 ### 1. AI 功能 ```python # Server 端 @router.post("/ai-enhance") async def ai_enhance(image: str, x_api_key: str): # 调用 TensorFlow/PyTorch 模型 result = ai_model.predict(image) return result ``` ### 2. 批量处理 ```python @router.post("/batch-process") async def batch_process(layers: List[str], x_api_key: str): results = [] for layer_id in layers: result = process_layer(layer_id) results.append(result) return results ``` ### 3. 数据分析 ```python @router.post("/analyze-design") async def analyze_design(doc_info: dict, x_api_key: str): # 分析设计质量、配色方案等 analysis = analyze_composition(doc_info) return analysis ``` ### 4. 实时协作 ```python @router.websocket("/ws/collaborate") async def collaborate(websocket: WebSocket, x_api_key: str): # WebSocket 实时同步 await websocket.accept() # 多用户协作编辑 ``` --- ## 🛡️ 安全最佳实践 ### ✅ 已实现 - API Key 鉴权 - 输入验证 - 详细日志 - 核心算法保护 ### ⚠️ 生产环境建议 - 启用 HTTPS - 添加限流(Rate Limiting) - IP 白名单 - 定期更换 API Key - 数据库存储 Key(而非配置文件) --- ## 📚 开发流程总结 ```mermaid graph TD A[设计新功能] --> B[后端实现核心算法] B --> C[前端调用 API] C --> D[UI 界面集成] D --> E[测试] E --> F[构建 Core] F --> G[自动部署] G --> H[用户自动更新] ``` --- ## 🎯 框架优势 | 特性 | 传统方案 | 本框架 | |------|---------|--------| | 核心算法保护 | ❌ 暴露在前端 | ✅ 服务器端执行 | | 动态更新 | ❌ 需重装插件 | ✅ 自动下载更新 | | 安全鉴权 | ❌ 无验证 | ✅ API Key + 日志 | | 可扩展性 | ⚠️ 受限 | ✅ 易于添加功能 | | 开发效率 | ⚠️ 中等 | ✅ 模板化开发 | --- ## 🎉 总结 这个框架提供了: 1. **完整的三层架构**(Shell → Core → Server) 2. **安全的算法保护**(服务器端计算) 3. **灵活的更新机制**(动态加载 Core) 4. **标准的开发模式**(模板化添加功能) 5. **完善的监控日志**(追踪所有请求) **适用场景:** - Adobe CEP 插件开发 - 需要保护核心算法的应用 - 需要频繁更新的软件 - 需要鉴权和监控的服务 --- **现在你可以基于这个框架快速开发新功能了!** 🚀