Files
taiji-AI-PAD/services/data-ingestion/openapi_parser.py
T
xiaohei a0ba54b039 feat: 完成核心服务开发和阿里云源配置
- 修复MCP Server数据库连接和导入问题
- 创建Data Ingestion服务核心模块
- 配置阿里云镜像源提升构建速度
- 添加项目状态报告和文档
- 完善微服务架构基础设施
2025-12-20 16:45:05 +00:00

64 lines
2.3 KiB
Python

"""
OpenAPI解析器
解析OpenAPI/Swagger规范文档
"""
import logging
from typing import Dict, Any, List
logger = logging.getLogger(__name__)
class OpenAPIParser:
"""OpenAPI解析器"""
def __init__(self, cache_dir: str = None, redis_client=None):
self.cache_dir = cache_dir
self.redis_client = redis_client
async def parse_openapi_spec(self, spec_data: Dict[str, Any]) -> Dict[str, Any]:
"""解析OpenAPI规范"""
logger.info("Parsing OpenAPI specification")
try:
# 基本验证
if "openapi" not in spec_data and "swagger" not in spec_data:
raise ValueError("Invalid OpenAPI/Swagger specification")
parsed = {
"version": spec_data.get("openapi", spec_data.get("swagger")),
"info": spec_data.get("info", {}),
"servers": spec_data.get("servers", []),
"paths": spec_data.get("paths", {}),
"components": spec_data.get("components", {}),
"parsed": True
}
logger.info(f"Successfully parsed OpenAPI spec version {parsed['version']}")
return parsed
except Exception as e:
logger.error(f"Failed to parse OpenAPI spec: {e}")
return {"parsed": False, "error": str(e)}
async def extract_endpoints(self, spec_data: Dict[str, Any]) -> List[Dict[str, Any]]:
"""提取API端点"""
logger.info("Extracting endpoints from OpenAPI spec")
endpoints = []
paths = spec_data.get("paths", {})
for path, methods in paths.items():
for method, details in methods.items():
if method.upper() in ["GET", "POST", "PUT", "DELETE", "PATCH"]:
endpoint = {
"path": path,
"method": method.upper(),
"summary": details.get("summary", ""),
"description": details.get("description", ""),
"parameters": details.get("parameters", []),
"responses": details.get("responses", {})
}
endpoints.append(endpoint)
logger.info(f"Extracted {len(endpoints)} endpoints")
return endpoints