# AIOJ 博客服务接口文档 ## 服务信息 - **服务名称**: aioj-blog-service - **服务端口**: 18086 - **基础路径**: `/api` - **API 文档**: `/swagger-ui.html` ## 通用说明 ### 统一响应格式 所有接口均使用统一的响应格式 `Result`: ```json { "code": "0", // 响应码,"0"表示成功 "message": "success", // 响应信息 "data": {} // 响应数据 } ``` ### 分页响应格式 分页查询返回 `IPage` 格式: ```json { "code": "0", "message": "success", "data": { "records": [], // 数据列表 "total": 100, // 总记录数 "size": 10, // 每页数量 "current": 1, // 当前页码 "pages": 10 // 总页数 } } ``` --- ## 1. 文章管理接口 ### 1.1 创建文章 - **接口**: `POST /api/v1/article/create` - **描述**: 创建新文章,支持 Markdown 格式 **请求参数**: | 字段 | 类型 | 必填 | 说明 | 示例 | |------|------|------|------|------| | title | String | 是 | 文章标题 | Spring Boot 3.5.7 新特性详解 | | slug | String | 否 | 文章别名(URL友好标识) | spring-boot-3-5-7-features | | summary | String | 否 | 文章摘要 | 本文详细介绍Spring Boot 3.5.7版本的新特性... | | content | String | 是 | 文章内容(Markdown格式) | # 欢迎使用... | | coverImage | String | 否 | 封面图片URL | https://example.com/images/cover.jpg | | categoryId | Long | 是 | 分类ID | 1 | | tagIds | List\ | 否 | 标签ID列表 | [1, 2, 3] | | isTop | Integer | 否 | 是否置顶(0=否,1=是) | 0 | | isEssence | Integer | 否 | 是否精华(0=否,1=是) | 0 | | isPublished | Integer | 否 | 是否发布(0=草稿,1=已发布) | 1 | **响应示例**: ```json { "code": "0", "message": "success", "data": 123 } ``` ### 1.2 更新文章 - **接口**: `PUT /api/v1/article/update` - **描述**: 更新已存在的文章信息 **请求参数**: | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | id | Long | 是 | 文章ID | | 其他字段 | - | - | 同创建文章 | ### 1.3 删除文章 - **接口**: `DELETE /api/v1/article/delete/{articleId}` - **描述**: 逻辑删除指定文章 **路径参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | articleId | Long | 是 | 文章ID | ### 1.4 查询文章详情 - **接口**: `GET /api/v1/article/{articleId}` - **描述**: 根据文章ID查询文章详细信息 **响应示例**: ```json { "code": "0", "message": "success", "data": { "id": 1, "title": "Spring Boot 3.5.7 新特性详解", "slug": "spring-boot-3-5-7-features", "summary": "本文详细介绍Spring Boot 3.5.7版本的新特性...", "content": "# 欢迎使用...", "contentHtml": "

欢迎使用...

", "coverImage": "https://example.com/images/cover.jpg", "authorId": 1, "authorName": "admin", "categoryId": 1, "categoryName": "算法题解", "tags": [ { "id": 1, "name": "数据结构", "slug": "data-structure", "color": "#3498db" } ], "viewCount": 100, "likeCount": 10, "commentCount": 5, "collectCount": 3, "isTop": 0, "isEssence": 0, "isPublished": 1, "status": 1, "publishTime": "2026-01-26T10:00:00", "createTime": "2026-01-26T09:00:00", "updateTime": "2026-01-26T10:00:00", "isLiked": false, "isCollected": false } } ``` ### 1.5 根据slug查询文章 - **接口**: `GET /api/v1/article/slug/{slug}` ### 1.6 分页查询文章列表 - **接口**: `POST /api/v1/article/list` **请求参数**: | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | current | Integer | 否 | 页码,默认1 | | size | Integer | 否 | 每页数量,默认10 | | id | Long | 否 | 文章ID | | title | String | 否 | 文章标题(模糊查询) | | categoryId | Long | 否 | 分类ID | | tagId | Long | 否 | 标签ID | | authorId | Long | 否 | 作者ID | | isTop | Integer | 否 | 是否置顶 | | isEssence | Integer | 否 | 是否精华 | | isPublished | Integer | 否 | 是否发布(0=草稿,1=已发布) | | status | Integer | 否 | 文章状态(1=正常,2=审核中,3=已关闭,4=已删除) | | sortField | String | 否 | 排序字段(view_count/like_count/comment_count/publish_time) | | sortOrder | String | 否 | 排序方式(asc/desc) | ### 1.7 发布文章 - **接口**: `PUT /api/v1/article/publish/{articleId}` ### 1.8 取消发布文章 - **接口**: `PUT /api/v1/article/unpublish/{articleId}` ### 1.9 增加文章浏览量 - **接口**: `POST /api/v1/article/view/{articleId}` --- ## 2. 分类管理接口 ### 2.1 创建分类 - **接口**: `POST /api/v1/category/create` **请求参数**: | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | name | String | 是 | 分类名称 | | slug | String | 否 | 分类别名 | | description | String | 否 | 分类描述 | | icon | String | 否 | 分类图标 | | sortOrder | Integer | 否 | 排序序号 | | parentId | Long | 否 | 父分类ID | | isEnabled | Integer | 否 | 是否启用 | ### 2.2 更新分类 - **接口**: `PUT /api/v1/category/update` ### 2.3 删除分类 - **接口**: `DELETE /api/v1/category/delete/{categoryId}` ### 2.4 查询分类详情 - **接口**: `GET /api/v1/category/{categoryId}` **响应示例**: ```json { "code": "0", "message": "success", "data": { "id": 1, "name": "算法题解", "slug": "algorithm-solutions", "description": "算法题目解题思路和代码分享", "icon": "💡", "sortOrder": 1, "parentId": 0, "articleCount": 10, "isEnabled": 1, "createTime": "2026-01-26T09:00:00", "updateTime": "2026-01-26T09:00:00" } } ``` ### 2.5 根据slug查询分类 - **接口**: `GET /api/v1/category/slug/{slug}` ### 2.6 查询所有分类 - **接口**: `GET /api/v1/category/list/all` ### 2.7 查询启用的分类 - **接口**: `GET /api/v1/category/list/enabled` --- ## 3. 标签管理接口 ### 3.1 创建标签 - **接口**: `POST /api/v1/tag/create` **请求参数**: | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | name | String | 是 | 标签名称 | | slug | String | 否 | 标签别名 | | description | String | 否 | 标签描述 | | color | String | 否 | 标签颜色 | | isEnabled | Integer | 否 | 是否启用 | ### 3.2 更新标签 - **接口**: `PUT /api/v1/tag/update` ### 3.3 删除标签 - **接口**: `DELETE /api/v1/tag/delete/{tagId}` ### 3.4 查询标签详情 - **接口**: `GET /api/v1/tag/{tagId}` **响应示例**: ```json { "code": "0", "message": "success", "data": { "id": 1, "name": "数据结构", "slug": "data-structure", "description": "数据结构与算法相关内容", "color": "#3498db", "articleCount": 5, "isEnabled": 1, "createTime": "2026-01-26T09:00:00", "updateTime": "2026-01-26T09:00:00" } } ``` ### 3.5 根据slug查询标签 - **接口**: `GET /api/v1/tag/slug/{slug}` ### 3.6 查询所有标签 - **接口**: `GET /api/v1/tag/list/all` ### 3.7 查询启用的标签 - **接口**: `GET /api/v1/tag/list/enabled` ### 3.8 查询文章的标签 - **接口**: `GET /api/v1/tag/article/{articleId}` --- ## 4. 评论管理接口 ### 4.1 发表评论 - **接口**: `POST /api/v1/comment/create` **请求参数**: | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | articleId | Long | 是 | 文章ID | | content | String | 是 | 评论内容(支持Markdown) | | parentId | Long | 否 | 父评论ID(0表示一级评论) | | replyToId | Long | 否 | 回复的评论ID(用于@提醒) | ### 4.2 回复评论 - **接口**: `POST /api/v1/comment/reply` ### 4.3 删除评论 - **接口**: `DELETE /api/v1/comment/delete/{commentId}` ### 4.4 查询评论详情 - **接口**: `GET /api/v1/comment/{commentId}` **响应示例**: ```json { "code": "0", "message": "success", "data": { "id": 1, "articleId": 1, "userId": 1, "userName": "admin", "userAvatar": "https://example.com/avatar.jpg", "parentId": 0, "replyToId": 0, "replyToName": null, "content": "这篇文章写得很好!", "contentHtml": "

这篇文章写得很好!

", "likeCount": 5, "replyCount": 2, "isAuthor": 1, "status": 1, "createTime": "2026-01-26T10:00:00", "updateTime": "2026-01-26T10:00:00", "isLiked": false, "children": [] } } ``` ### 4.5 查询文章评论 - **接口**: `GET /api/v1/comment/article/{articleId}` - **描述**: 根据文章ID查询该文章的所有评论(树形结构) ### 4.6 分页查询评论列表 - **接口**: `POST /api/v1/comment/list` ### 4.7 查询子评论 - **接口**: `GET /api/v1/comment/children/{parentId}` --- ## 5. 点赞管理接口 ### 5.1 点赞 - **接口**: `POST /api/v1/like/like` **请求参数**: | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | targetId | Long | 是 | 目标ID | | targetType | Integer | 是 | 目标类型(1=文章,2=评论) | ### 5.2 取消点赞 - **接口**: `POST /api/v1/like/unlike` ### 5.3 查询点赞状态 - **接口**: `GET /api/v1/like/check` **请求参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | targetId | Long | 是 | 目标ID | | targetType | Integer | 是 | 目标类型(1=文章,2=评论) | ### 5.4 切换点赞状态 - **接口**: `POST /api/v1/like/toggle` --- ## 6. 收藏管理接口 ### 6.1 收藏文章 - **接口**: `POST /api/v1/collection/collect` **请求参数**: | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | articleId | Long | 是 | 文章ID | | folderId | Long | 否 | 收藏夹ID | ### 6.2 取消收藏文章 - **接口**: `DELETE /api/v1/collection/uncollect/{articleId}` ### 6.3 查询收藏状态 - **接口**: `GET /api/v1/collection/check/{articleId}` ### 6.4 创建收藏夹 - **接口**: `POST /api/v1/collection/folder/create` **请求参数**: | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | name | String | 是 | 收藏夹名称 | | description | String | 否 | 收藏夹描述 | ### 6.5 删除收藏夹 - **接口**: `DELETE /api/v1/collection/folder/delete/{folderId}` ### 6.6 查询收藏夹列表 - **接口**: `GET /api/v1/collection/folder/list` ### 6.7 分页查询收藏列表 - **接口**: `GET /api/v1/collection/list` **请求参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | current | Integer | 是 | 页码 | | size | Integer | 是 | 每页数量 | | folderId | Long | 否 | 收藏夹ID | --- ## 7. 关注管理接口 ### 7.1 关注用户 - **接口**: `POST /api/v1/follow/follow` **请求参数**: | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | followingId | Long | 是 | 被关注者ID | ### 7.2 取消关注用户 - **接口**: `DELETE /api/v1/follow/unfollow/{followingId}` ### 7.3 查询关注状态 - **接口**: `GET /api/v1/follow/check/{followingId}` ### 7.4 查询关注列表 - **接口**: `GET /api/v1/follow/following/list` **请求参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | userId | Long | 是 | 用户ID | | current | Integer | 是 | 页码 | | size | Integer | 是 | 每页数量 | ### 7.5 查询粉丝列表 - **接口**: `GET /api/v1/follow/followers/list` ### 7.6 查询关注数 - **接口**: `GET /api/v1/follow/following/count` ### 7.7 查询粉丝数 - **接口**: `GET /api/v1/follow/followers/count` --- ## 8. 通知管理接口 ### 8.1 分页查询通知列表 - **接口**: `POST /api/v1/notification/list` ### 8.2 标记通知为已读 - **接口**: `PUT /api/v1/notification/read/{notificationId}` ### 8.3 批量标记通知为已读 - **接口**: `PUT /api/v1/notification/read/batch` **请求参数**: | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | - | List\ | 是 | 通知ID列表 | ### 8.4 标记所有通知为已读 - **接口**: `PUT /api/v1/notification/read/all` ### 8.5 清空所有通知 - **接口**: `DELETE /api/v1/notification/clear/all` ### 8.6 查询未读通知数量 - **接口**: `GET /api/v1/notification/unread/count` --- ## 9. 草稿箱管理接口 ### 9.1 保存草稿 - **接口**: `POST /api/v1/draft/save` **请求参数**: | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | title | String | 否 | 草稿标题 | | content | String | 否 | 草稿内容 | | coverImage | String | 否 | 封面图片 | | categoryId | Long | 否 | 分类ID | | tagIds | List\ | 否 | 标签ID列表 | ### 9.2 删除草稿 - **接口**: `DELETE /api/v1/draft/delete/{draftId}` ### 9.3 查询草稿详情 - **接口**: `GET /api/v1/draft/{draftId}` ### 9.4 分页查询草稿列表 - **接口**: `GET /api/v1/draft/list` **请求参数**: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | current | Integer | 是 | 页码 | | size | Integer | 是 | 每页数量 | ### 9.5 查询最新草稿 - **接口**: `GET /api/v1/draft/latest` --- ## 附录:数据模型 ### ArticleResponseDTO(文章响应) | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 文章ID | | title | String | 文章标题 | | slug | String | 文章别名 | | summary | String | 文章摘要 | | content | String | 文章内容(Markdown格式) | | contentHtml | String | 渲染后的HTML内容 | | coverImage | String | 封面图片URL | | authorId | Long | 作者用户ID | | authorName | String | 作者用户名 | | categoryId | Long | 分类ID | | categoryName | String | 分类名称 | | tags | List\ | 标签列表 | | viewCount | Integer | 浏览次数 | | likeCount | Integer | 点赞数 | | commentCount | Integer | 评论数 | | collectCount | Integer | 收藏数 | | isTop | Integer | 是否置顶 | | isEssence | Integer | 是否精华 | | isPublished | Integer | 是否发布 | | status | Integer | 文章状态 | | publishTime | Date | 发布时间 | | createTime | Date | 创建时间 | | updateTime | Date | 更新时间 | | isLiked | Boolean | 当前用户是否点赞 | | isCollected | Boolean | 当前用户是否收藏 | ### ArticleListResponseDTO(文章列表响应) | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 文章ID | | title | String | 文章标题 | | slug | String | 文章别名 | | summary | String | 文章摘要 | | coverImage | String | 封面图片URL | | authorId | Long | 作者用户ID | | authorName | String | 作者用户名 | | authorAvatar | String | 作者头像 | | categoryId | Long | 分类ID | | categoryName | String | 分类名称 | | tags | List\ | 标签列表 | | viewCount | Integer | 浏览次数 | | likeCount | Integer | 点赞数 | | commentCount | Integer | 评论数 | | collectCount | Integer | 收藏数 | | isTop | Integer | 是否置顶 | | isEssence | Integer | 是否精华 | | publishTime | Date | 发布时间 | | createTime | Date | 创建时间 | | isLiked | Boolean | 当前用户是否点赞 | | isCollected | Boolean | 当前用户是否收藏 | ### CommentResponseDTO(评论响应) | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 评论ID | | articleId | Long | 文章ID | | userId | Long | 评论用户ID | | userName | String | 评论用户名 | | userAvatar | String | 评论用户头像 | | parentId | Long | 父评论ID | | replyToId | Long | 回复的评论ID | | replyToName | String | 回复的用户名 | | content | String | 评论内容 | | contentHtml | String | 渲染后的HTML内容 | | likeCount | Integer | 点赞数 | | replyCount | Integer | 回复数 | | isAuthor | Integer | 是否为作者评论 | | status | Integer | 状态 | | createTime | Date | 创建时间 | | updateTime | Date | 更新时间 | | isLiked | Boolean | 当前用户是否点赞 | | children | List\ | 子评论列表 | ### CategoryResponseDTO(分类响应) | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 分类ID | | name | String | 分类名称 | | slug | String | 分类别名 | | description | String | 分类描述 | | icon | String | 分类图标 | | sortOrder | Integer | 排序序号 | | parentId | Long | 父分类ID | | articleCount | Integer | 该分类下的文章数量 | | isEnabled | Integer | 是否启用 | | createTime | Date | 创建时间 | | updateTime | Date | 更新时间 | ### TagResponseDTO(标签响应) | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 标签ID | | name | String | 标签名称 | | slug | String | 标签别名 | | description | String | 标签描述 | | color | String | 标签颜色 | | articleCount | Integer | 使用该标签的文章数量 | | isEnabled | Integer | 是否启用 | | createTime | Date | 创建时间 | | updateTime | Date | 更新时间 |