接口文档.md 5.6 KB

书籍管理系统 API 设计

基于之前设计的 MySQL 表结构,以下是完整的 RESTful API 设计,包含调用示例和必填/非必填项说明。

1. 作者管理接口

1.1 创建作者

POST /api/authors

​请求参数​​:

{
  "name": "鲁迅", // 必填
  "bio": "中国现代文学奠基人", // 非必填
  "birth_date": "1881-09-25", // 非必填
  "death_date": "1936-10-19", // 非必填
  "nationality": "中国" // 非必填
}

​成功响应​​:

{
  "author_id": 1,
  "name": "鲁迅",
  "bio": "中国现代文学奠基人",
  "birth_date": "1881-09-25",
  "death_date": "1936-10-19",
  "nationality": "中国",
  "created_at": "2023-08-01T10:00:00Z"
}

1.2 获取作者列表

GET /api/authors?page=1&page_size=10&name=鲁迅

​查询参数​​:

  • page: 页码 (非必填,默认1)
  • page_size: 每页数量 (非必填,默认10)
  • name: 作者姓名模糊搜索 (非必填)

​成功响应​​:

{
  "total": 1,
  "page": 1,
  "page_size": 10,
  "data": [
    {
      "author_id": 1,
      "name": "鲁迅",
      "bio": "中国现代文学奠基人",
      "birth_date": "1881-09-25",
      "death_date": "1936-10-19",
      "nationality": "中国"
    }
  ]
}

2. 书籍管理接口

2.1 创建书籍

POST /api/books

​请求参数​​:

{
  "title": "呐喊", // 必填
  "author_id": 1, // 必填
  "type_id": 1, // 必填
  "cover_image_url": "https://example.com/nahan.jpg", // 非必填
  "description": "鲁迅的第一部小说集", // 非必填
  "isbn": "9787020090006", // 非必填
  "publish_date": "1923-08-01", // 非必填
  "publisher": "新潮社", // 非必填
  "page_count": 200, // 非必填
  "language": "中文", // 非必填
  "status": "published" // 非必填,默认draft
}

​成功响应​​:

{
  "book_id": 1,
  "title": "呐喊",
  "author_id": 1,
  "type_id": 1,
  "cover_image_url": "https://example.com/nahan.jpg",
  "status": "published",
  "created_at": "2023-08-01T10:00:00Z"
}

2.2 更新书籍信息

PUT /api/books/{book_id}

​请求参数​​:

{
  "title": "呐喊(修订版)", // 非必填
  "description": "鲁迅的第一部小说集,包含《狂人日记》等名篇", // 非必填
  "status": "published" // 非必填
}

​成功响应​​:

{
  "book_id": 1,
  "title": "呐喊(修订版)",
  "description": "鲁迅的第一部小说集,包含《狂人日记》等名篇",
  "updated_at": "2023-08-01T11:00:00Z"
}

3. 章节管理接口

3.1 创建章节

POST /api/books/{book_id}/chapters

​请求参数​​:

{
  "chapter_number": 1, // 必填
  "title": "狂人日记", // 必填
  "content": "今天晚上,很好的月光..." // 非必填
}

​成功响应​​:

{
  "chapter_id": 1,
  "book_id": 1,
  "chapter_number": 1,
  "title": "狂人日记",
  "word_count": 0,
  "created_at": "2023-08-01T10:00:00Z"
}

3.2 更新章节内容

PUT /api/chapters/{chapter_id}/content

​请求参数​​:

{
  "content": "今天晚上,很好的月光...我不见他,已是三十多年...", // 必填
  "change_reason": "修正错别字" // 非必填
}

​成功响应​​:

{
  "content_id": 1,
  "chapter_id": 1,
  "version": 2,
  "word_count": 15,
  "updated_at": "2023-08-01T11:00:00Z"
}

4. 历史记录查询接口

4.1 获取书籍修改历史

GET /api/books/{book_id}/history?page=1&page_size=10

​查询参数​​:

  • page: 页码 (非必填,默认1)
  • page_size: 每页数量 (非必填,默认10)

​成功响应​​:

{
  "total": 2,
  "page": 1,
  "page_size": 10,
  "data": [
    {
      "history_id": 1,
      "title": "呐喊",
      "description": "鲁迅的第一部小说集",
      "changed_at": "2023-08-01T10:00:00Z"
    },
    {
      "history_id": 2,
      "title": "呐喊(修订版)",
      "description": "鲁迅的第一部小说集,包含《狂人日记》等名篇",
      "changed_at": "2023-08-01T11:00:00Z"
    }
  ]
}

4.2 获取章节内容历史

GET /api/chapters/{chapter_id}/content/history?page=1&page_size=10

​成功响应​​:

{
  "total": 2,
  "page": 1,
  "page_size": 10,
  "data": [
    {
      "history_id": 1,
      "version": 1,
      "word_count": 0,
      "change_reason": "初始版本",
      "changed_at": "2023-08-01T10:00:00Z"
    },
    {
      "history_id": 2,
      "version": 2,
      "word_count": 15,
      "change_reason": "修正错别字",
      "changed_at": "2023-08-01T11:00:00Z"
    }
  ]
}

5. 错误响应

所有接口的错误响应格式统一:

{
  "error": {
    "code": "INVALID_PARAMETER",
    "message": "作者ID不能为空",
    "details": {
      "author_id": "该字段为必填项"
    }
  }
}

常见错误码:

  • INVALID_PARAMETER: 参数验证失败
  • RESOURCE_NOT_FOUND: 资源不存在
  • DUPLICATE_RESOURCE: 资源已存在
  • PERMISSION_DENIED: 权限不足

接口设计说明

  1. ​必填项验证​​:所有创建接口的必填字段都会进行验证
  2. ​版本控制​​:章节内容修改会自动生成新版本
  3. ​分页查询​​:所有列表接口都支持分页
  4. ​历史追踪​​:书籍和章节的修改都会记录历史
  5. ​RESTful风格​​:资源路径清晰,HTTP方法语义明确

这个API设计覆盖了表结构中的所有核心功能,并考虑了实际应用场景中的需求。