📖 小说管理 API
通过 HTTP API 管理小说数据
小说管理 API 提供了完整的 CRUD 操作,允许您通过 HTTP 请求获取、创建、更新和删除小说数据。
📥 获取所有小说
GET
/api/novels响应:200 OK,返回小说数组
[
{
"id": "1738368000000abc123",
"resourceType": "novel",
"name": "三体",
"description": "地球往事三部曲第一部,讲述了地球文明和三体文明的信息交流、生死搏杀以及两个文明在宇宙中的兴衰历程。",
"author": "刘慈欣",
"genre": "科幻",
"tags": ["科幻", "硬科幻", "雨果奖"],
"resourcePath": "E:\\Books\\三体.epub",
"coverPath": "E:\\Books\\Covers\\三体.jpg",
"publishYear": "2008",
"visitedSessions": [
"2025-12-01T10:30:00.000Z",
"2025-12-15T14:20:00.000Z"
],
"addedDate": "2025-11-20T08:00:00.000Z",
"rating": 5,
"comment": "非常精彩的硬科幻作品",
"isFavorite": true
}
]JavaScript
// 获取所有小说
fetch('http://localhost:3000/api/novels')
.then(response => response.json())
.then(novels => console.log(novels))
.catch(error => console.error('Error:', error));Python
import requests
# 获取所有小说
response = requests.get('http://localhost:3000/api/novels')
novels = response.json()
print(novels)📥 获取单个小说
GET
/api/novels/:id参数:id - 小说ID
响应:200 OK 返回小说对象,不存在则 404
{
"id": "1738368000000abc123",
"resourceType": "novel",
"name": "三体",
"description": "地球往事三部曲第一部,讲述了地球文明和三体文明的信息交流、生死搏杀以及两个文明在宇宙中的兴衰历程。",
"author": "刘慈欣",
"genre": "科幻",
"tags": ["科幻", "硬科幻", "雨果奖"],
"resourcePath": "E:\\Books\\三体.epub",
"coverPath": "E:\\Books\\Covers\\三体.jpg",
"publishYear": "2008",
"visitedSessions": [
"2025-12-01T10:30:00.000Z",
"2025-12-15T14:20:00.000Z"
],
"addedDate": "2025-11-20T08:00:00.000Z",
"rating": 5,
"comment": "非常精彩的硬科幻作品",
"isFavorite": true
}JavaScript
// 获取单个小说
const novelId = '1738368000000abc123';
fetch(`http://localhost:3000/api/novels/${novelId}`)
.then(response => response.json())
.then(novel => console.log(novel))
.catch(error => console.error('Error:', error));Python
import requests
# 获取单个小说
novel_id = '1738368000000abc123'
response = requests.get(f'http://localhost:3000/api/novels/{novel_id}')
novel = response.json()
print(novel)➕ 创建小说
POST
/api/novels请求体:
{
"name": "三体",
"description": "地球往事三部曲第一部",
"author": "刘慈欣",
"genre": "科幻",
"tags": ["科幻", "硬科幻", "雨果奖"],
"resourcePath": "E:\\Books\\三体.epub",
"coverPath": "E:\\Books\\Covers\\三体.jpg",
"publishYear": "2008",
"rating": 5,
"comment": "非常精彩的硬科幻作品",
"isFavorite": true
}响应:201 Created,返回创建的小说对象
注意:ID 和 addedDate 会自动生成
JavaScript
// 创建小说
fetch('http://localhost:3000/api/novels', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: '三体',
description: '地球往事三部曲第一部',
author: '刘慈欣',
genre: '科幻',
tags: ['科幻', '硬科幻', '雨果奖'],
resourcePath: 'E:\\Books\\三体.epub',
rating: 5
})
})
.then(response => response.json())
.then(novel => console.log('Created:', novel))
.catch(error => console.error('Error:', error));Python
import requests
# 创建小说
novel_data = {
'name': '三体',
'description': '地球往事三部曲第一部',
'author': '刘慈欣',
'genre': '科幻',
'tags': ['科幻', '硬科幻', '雨果奖'],
'resourcePath': 'E:\\Books\\三体.epub',
'rating': 5
}
response = requests.post('http://localhost:3000/api/novels', json=novel_data)
novel = response.json()
print('Created:', novel)✏️ 更新小说
PUT
/api/novels/:id参数:id - 小说ID
请求体:要更新的字段(JSON 对象,只需传要修改的字段)
{
"rating": 5,
"comment": "重读后更加喜欢了",
"isFavorite": true
}响应:200 OK,返回更新后的小说对象
注意:ID 和 addedDate 字段不允许修改
JavaScript
// 更新小说
const novelId = '1738368000000abc123';
fetch(`http://localhost:3000/api/novels/${novelId}`, {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
rating: 5,
comment: '重读后更加喜欢了'
})
})
.then(response => response.json())
.then(novel => console.log('Updated:', novel))
.catch(error => console.error('Error:', error));Python
import requests
# 更新小说
novel_id = '1738368000000abc123'
update_data = {
'rating': 5,
'comment': '重读后更加喜欢了'
}
response = requests.put(f'http://localhost:3000/api/novels/{novel_id}', json=update_data)
novel = response.json()
print('Updated:', novel)🗑️ 删除小说
DELETE
/api/novels/:id参数:id - 小说ID
响应:204 No Content(成功)或 404 Not Found(不存在)
注意:删除操作不会删除本地小说文件,仅移除管理器中的引用
JavaScript
// 删除小说
const novelId = '1738368000000abc123';
fetch(`http://localhost:3000/api/novels/${novelId}`, {
method: 'DELETE'
})
.then(response => {
if (response.status === 204) {
console.log('Novel deleted successfully');
}
})
.catch(error => console.error('Error:', error));Python
import requests
# 删除小说
novel_id = '1738368000000abc123'
response = requests.delete(f'http://localhost:3000/api/novels/{novel_id}')
if response.status_code == 204:
print('Novel deleted successfully')📊 小说数据字段说明
小说对象包含以下字段:
id- 小说唯一标识符(自动生成,不可修改)resourceType- 资源类型,固定为 "novel"name- 小说名称(必需)description- 小说简介author- 作者genre- 类型(如:科幻、奇幻、言情等)tags- 标签数组resourcePath- 小说文件路径coverPath- 封面图片路径publishYear- 出版年份visitedSessions- 访问会话时间数组(ISO 字符串数组,记录每次阅读时间)addedDate- 添加日期(自动生成,不可修改)rating- 评分(1-5 或 0)comment- 备注isFavorite- 是否收藏
⚠️ 错误处理
API 使用标准的 HTTP 状态码:
200 OK- 请求成功201 Created- 资源创建成功204 No Content- 删除成功400 Bad Request- 请求参数错误(如缺少必需字段)404 Not Found- 资源不存在500 Internal Server Error- 服务器内部错误
错误响应格式:
{
"error": "小说名称不能为空"
}