- 修复MCP Server数据库连接和导入问题 - 创建Data Ingestion服务核心模块 - 配置阿里云镜像源提升构建速度 - 添加项目状态报告和文档 - 完善微服务架构基础设施
64 lines
2.3 KiB
Python
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
|