/** * API模块 - 封装所有后端API调用 */ const API = (function() { const BASE_URL = '/api'; // 通用请求方法 async function request(url, options = {}) { const defaultOptions = { headers: { 'Content-Type': 'application/json' } }; const config = { ...defaultOptions, ...options }; try { const response = await fetch(BASE_URL + url, config); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } // 204 No Content if (response.status === 204) { return null; } return await response.json(); } catch (error) { console.error('API请求失败:', error); throw error; } } // GET请求 function get(url, params = {}) { const queryString = new URLSearchParams(params).toString(); const fullUrl = queryString ? `${url}?${queryString}` : url; return request(fullUrl); } // POST请求 function post(url, data) { return request(url, { method: 'POST', body: JSON.stringify(data) }); } // DELETE请求 function del(url, params = {}) { const queryString = new URLSearchParams(params).toString(); const fullUrl = queryString ? `${url}?${queryString}` : url; return request(fullUrl, { method: 'DELETE' }); } // ========== 小说相关API ========== /** * 搜索小说 * @param {Object} params - { keyword, tag, page, size } */ function searchNovels(params = {}) { return get('/novels', params); } /** * 获取小说详情 * @param {string} novelId */ function getNovelDetail(novelId) { return get(`/novels/${novelId}`); } /** * 获取章节列表 * @param {string} novelId * @param {Object} params - { page, size } */ function getChapters(novelId, params = {}) { return get(`/novels/${novelId}/chapters`, params); } /** * 获取热门标签 * @param {number} limit */ function getPopularTags(limit = 20) { return get('/novels/tags/popular', { limit }); } /** * 随机获取小说 * @param {number} size 数量 */ function getRandomNovels(size = 10) { return get('/novels/random', { size }); } // ========== 章节相关API ========== /** * 根据章节ID获取内容 * @param {string} chapterId */ function getChapterById(chapterId) { return get(`/chapters/${chapterId}`); } /** * 根据小说ID和索引获取章节 * @param {string} novelId * @param {number} index */ function getChapterByIndex(novelId, index) { return get(`/chapters/novel/${novelId}`, { index }); } /** * 获取下一章 * @param {string} novelId * @param {number} currentIndex */ function getNextChapter(novelId, currentIndex) { return get(`/chapters/novel/${novelId}/next`, { currentIndex }); } /** * 获取上一章 * @param {string} novelId * @param {number} currentIndex */ function getPrevChapter(novelId, currentIndex) { return get(`/chapters/novel/${novelId}/prev`, { currentIndex }); } /** * 获取第一章 * @param {string} novelId */ function getFirstChapter(novelId) { return get(`/chapters/novel/${novelId}/first`); } // ========== 书架相关API ========== /** * 获取书架列表 * @param {Object} params - { userId, page, size } */ function getShelf(params = {}) { return get('/shelf', params); } /** * 加入书架 * @param {Object} data - { userId, novelId, tags } */ function addToShelf(data) { return post('/shelf', data); } /** * 从书架移除 * @param {string} novelId * @param {string} userId */ function removeFromShelf(novelId, userId) { return del(`/shelf/${novelId}`, userId ? { userId } : {}); } /** * 检查是否在书架 * @param {string} novelId * @param {string} userId */ function isInShelf(novelId, userId) { return get(`/shelf/${novelId}/exists`, userId ? { userId } : {}); } // ========== 历史相关API ========== /** * 获取阅读历史 * @param {Object} params - { userId, page, size } */ function getHistory(params = {}) { return get('/history', params); } /** * 获取某本书的历史进度 * @param {string} novelId * @param {string} userId */ function getHistoryByNovel(novelId, userId) { return get(`/history/novel/${novelId}`, userId ? { userId } : {}); } /** * 更新阅读进度 * @param {Object} data - { userId, novelId, chapterId, position } */ function updateHistory(data) { return post('/history', data); } /** * 删除历史记录 * @param {string} novelId * @param {string} userId */ function deleteHistory(novelId, userId) { return del(`/history/novel/${novelId}`, userId ? { userId } : {}); } // ========== 书签相关API ========== /** * 获取书签列表 * @param {Object} params - { userId, page, size } */ function getBookmarks(params = {}) { return get('/bookmarks', params); } /** * 获取某本书的书签 * @param {string} novelId * @param {string} userId */ function getBookmarksByNovel(novelId, userId) { return get(`/bookmarks/novel/${novelId}`, userId ? { userId } : {}); } /** * 创建书签 * @param {Object} data - { userId, novelId, chapterId, position, note } */ function createBookmark(data) { return post('/bookmarks', data); } /** * 删除书签 * @param {string} bookmarkId * @param {string} userId */ function deleteBookmark(bookmarkId, userId) { return del(`/bookmarks/${bookmarkId}`, userId ? { userId } : {}); } // 公开API return { // 小说 searchNovels, getNovelDetail, getChapters, getPopularTags, getRandomNovels, // 章节 getChapterById, getChapterByIndex, getNextChapter, getPrevChapter, getFirstChapter, // 书架 getShelf, addToShelf, removeFromShelf, isInShelf, // 历史 getHistory, getHistoryByNovel, updateHistory, deleteHistory, // 书签 getBookmarks, getBookmarksByNovel, createBookmark, deleteBookmark }; })();