import axios from 'axios'; import type { GraphData, Node, CreateNodeRequest, UpdateNodeRequest, CreateEdgeRequest, DeleteResponse, EdgeResponse, NeighborResponse, SearchResponse, SimpleGraphData, GraphStats, } 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: [] }; } }, /** * 根据 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; } }, async createNode(request: CreateNodeRequest): Promise { const response = await apiClient.post('/nodes', request); return response.data; }, async updateNode(id: string, request: UpdateNodeRequest): Promise { const response = await apiClient.put(`/nodes/${id}`, request); return response.data; }, async deleteNode(id: string): Promise { const response = await apiClient.delete(`/nodes/${id}`); return response.data; }, async getNodeNeighbors(id: string): Promise { const response = await apiClient.get(`/nodes/${id}/neighbors`); return response.data; }, async createEdge(request: CreateEdgeRequest): Promise { const response = await apiClient.post('/edges', request); return response.data; }, async deleteEdge(id: string): Promise { const response = await apiClient.delete(`/edges/${id}`); return response.data; }, async getGraphStats(): Promise { const response = await apiClient.get('/graph/stats'); return response.data; }, async getSimpleGraphData(): Promise { const response = await apiClient.get('/graph/simpleJson'); return response.data; }, async searchNodes(query: string): Promise { const response = await apiClient.get('/search', { params: { q: query }, }); return response.data; }, async healthCheck(): Promise<{ status: string }> { const response = await apiClient.get<{ status: string }>('/health'); return response.data; }, }; export default apiClient;