import axios from 'axios'; import type { GraphData, Node, Edge } from '../types/graph'; import { API_BASE_URL, API_TIMEOUT } from '../config/constants'; /** * API 客户端实例 * 统一配置了 base URL、超时时间和默认请求头 */ const apiClient = axios.create({ baseURL: API_BASE_URL, timeout: API_TIMEOUT, headers: { 'Content-Type': 'application/json', }, }); /** * 知识图谱 API 服务 * 提供与后端交互的所有图谱相关接口 */ export const graphApi = { /** * 获取完整的知识图谱数据 * @returns 节点和边的集合 */ async getData(): Promise { try { const response = await apiClient.get('/graph'); return response.data; } catch (error) { console.error('Failed to fetch graph data:', error); return { nodes: [], edges: [] }; } }, /** * 搜索节点(后端搜索) * @param query 搜索关键词 * @returns 匹配的节点列表 */ async searchNodes(query: string): Promise { try { const response = await apiClient.get(`/search?q=${encodeURIComponent(query)}`); return response.data; } catch (error) { console.error('Failed to search nodes:', error); return []; } }, /** * 根据 ID 获取节点详情 * @param id 节点 ID * @returns 节点对象或 null */ async getNodeById(id: string): Promise { try { const response = await apiClient.get(`/nodes/${id}`); return response.data; } catch (error) { console.error('Failed to fetch node:', error); return null; } }, /** * 获取节点的邻居节点和连接边 * @param nodeId 节点 ID * @returns 包含邻居节点和边的对象 */ async getNeighbors(nodeId: string): Promise<{ nodes: Node[]; edges: Edge[] }> { try { const response = await apiClient.get(`/nodes/${nodeId}/neighbors`); return response.data; } catch (error) { console.error('Failed to fetch neighbors:', error); return { nodes: [], edges: [] }; } }, }; export default apiClient;