diff --git a/src/api/categoryApi.ts b/src/api/categoryApi.ts
new file mode 100644
index 0000000..816ac71
--- /dev/null
+++ b/src/api/categoryApi.ts
@@ -0,0 +1,90 @@
+import axios from 'axios';
+import type { CategoryDTO, Category, WorkResponse } from './otherType';
+
+const API_BASE_URL = '/api';
+
+class CategoryAPI {
+  /**
+   * 获取全部分区（树形结构）
+   * @returns 返回分区的树形结构数据
+   */
+  static getCategoryTree(): Promise<CategoryDTO[]> {
+    return axios.get<CategoryDTO[]>(`${API_BASE_URL}/categories`)
+      .then(response => response.data);
+  }
+
+  /**
+   * 获取单个分区详情
+   * @param id 分区ID
+   * @returns 返回单个分区的详细信息
+   */
+  static getCategory(id: number): Promise<Category> {
+    return axios.get<Category>(`${API_BASE_URL}/categories/${id}`)
+      .then(response => response.data);
+  }
+
+  /**
+   * 创建新分区
+   * @param category 分区数据（不包含ID）
+   * @returns 返回创建成功的消息
+   */
+  static createCategory(category: Omit<Category, 'id'>): Promise<string> {
+    return axios.post<string>(`${API_BASE_URL}/categories`, category)
+      .then(response => response.data);
+  }
+
+  /**
+   * 更新分区信息
+   * @param id 分区ID
+   * @param category 更新后的分区数据
+   * @returns 返回更新成功的消息
+   */
+  static updateCategory(id: number, category: Partial<Category>): Promise<string> {
+    return axios.put<string>(`${API_BASE_URL}/categories/${id}`, category)
+      .then(response => response.data);
+  }
+
+  /**
+   * 删除分区
+   * @param id 分区ID
+   * @returns 返回删除成功的消息
+   */
+  static deleteCategory(id: number): Promise<string> {
+    return axios.delete<string>(`${API_BASE_URL}/categories/${id}`)
+      .then(response => response.data);
+  }
+
+  /**
+   * 获取分区下的作品列表（带分页）
+   * @param categoryId 分区ID
+   * @param params 分页和排序参数
+   * @returns 返回作品列表和分页信息
+   */
+  static getWorksByCategory(
+    categoryId: number,
+    params?: {
+      page?: number;
+      size?: number;
+      sort?: string;
+    }
+  ): Promise<WorkResponse> {
+    return axios.get<WorkResponse>(`${API_BASE_URL}/works`, {
+      params: {
+        categoryId,
+        ...params
+      }
+    }).then(response => response.data);
+  }
+
+  /**
+   * 获取子分区列表
+   * @param parentId 父分区ID
+   * @returns 返回子分区列表
+   */
+  static getSubCategories(parentId: number): Promise<CategoryDTO[]> {
+    return axios.get<CategoryDTO[]>(`${API_BASE_URL}/categories/${parentId}/children`)
+      .then(response => response.data);
+  }
+}
+
+export default CategoryAPI;
\ No newline at end of file
diff --git a/src/api/categoryTypes.ts b/src/api/categoryTypes.ts
new file mode 100644
index 0000000..4a46034
--- /dev/null
+++ b/src/api/categoryTypes.ts
@@ -0,0 +1,67 @@
+import type { ReactNode } from "react";
+
+// 基础分类接口
+export interface CategoryDTO {
+  id: number;
+  name: string;
+  description?: string;
+  parentId?: number;  // 移除了 null 类型，只保留 number | undefined
+  children?: CategoryDTO[];
+  workCount?: number;
+}
+
+
+// 基础资源接口
+interface BaseResource {
+  id: number;
+  title: string;
+  categoryId: number;
+  categoryName: string;
+  uploadDate: string;
+  uploader: string;
+  size: string;
+  seeders: number;
+  leechers: number;
+  downloadCount: number;
+  hash: string;
+}
+
+// 音乐资源
+export interface MusicResource extends BaseResource {
+  category: ReactNode;
+  artist: string;
+  quality: 'MP3 128k' | 'MP3 320k' | 'FLAC' | 'APE' | 'Hi-Res' | 'DSD';
+  genre: string[];
+}
+
+// 影视资源
+export interface MovieResource extends BaseResource {
+  director: string;
+  actors: string[];
+  resolution: '1080p' | '720p' | '4K' | '8K';
+  duration: string;
+}
+
+// 游戏资源
+export interface GameResource extends BaseResource {
+  developer: string;
+  publisher: string;
+  platform: 'PC' | 'PS' | 'Xbox' | 'Switch';
+  releaseDate: string;
+}
+
+// 其他资源
+export interface OtherResource extends BaseResource {
+  description: string;
+  fileType: string;
+}
+
+// 分类DTO
+export interface CategoryDTO {
+  id: number;
+  name: string;
+  description?: string;
+  parentId?: number;
+  children?: CategoryDTO[];
+  workCount?: number;
+}
\ No newline at end of file
diff --git a/src/api/commentApi.ts b/src/api/commentApi.ts
new file mode 100644
index 0000000..360e659
--- /dev/null
+++ b/src/api/commentApi.ts
@@ -0,0 +1,77 @@
+import axios from 'axios';
+import type { Comment, CommentFormData, CommentReply, ReplyFormData } from './otherType';
+
+const API_BASE_URL = '/api';
+
+class CommentAPI {
+  /**
+   * 添加评论
+   */
+  static addComment(data: CommentFormData): Promise<Comment> {
+    return axios.post<Comment>(`${API_BASE_URL}/comments`, data)
+      .then(response => response.data);
+  }
+
+  /**
+   * 删除评论
+   */
+  static deleteComment(commentId: number): Promise<void> {
+    return axios.delete(`${API_BASE_URL}/comments/${commentId}`);
+  }
+
+  /**
+   * 更新评论
+   */
+  static updateComment(commentId: number, data: CommentFormData): Promise<Comment> {
+    return axios.put<Comment>(`${API_BASE_URL}/comments/${commentId}`, data)
+      .then(response => response.data);
+  }
+
+  /**
+   * 获取单个评论
+   */
+  static getCommentById(commentId: number): Promise<Comment> {
+    return axios.get<Comment>(`${API_BASE_URL}/comments/${commentId}`)
+      .then(response => response.data);
+  }
+
+  /**
+   * 获取帖子下的所有评论
+   */
+  static getCommentsByPostId(postId: number): Promise<Comment[]> {
+    return axios.get<Comment[]>(`${API_BASE_URL}/comments/post/${postId}`)
+      .then(response => response.data);
+  }
+
+  /**
+   * 添加回复
+   */
+  static addReply(commentId: number, data: ReplyFormData): Promise<CommentReply> {
+    return axios.post<CommentReply>(`${API_BASE_URL}/comments/${commentId}/replies`, data)
+      .then(response => response.data);
+  }
+
+  /**
+   * 获取评论的所有回复
+   */
+  static getReplies(commentId: number): Promise<CommentReply[]> {
+    return axios.get<CommentReply[]>(`${API_BASE_URL}/comments/${commentId}/replies`)
+      .then(response => response.data);
+  }
+
+  /**
+   * 点赞评论
+   */
+  static likeComment(commentId: number): Promise<void> {
+    return axios.post(`${API_BASE_URL}/comments/${commentId}/like`);
+  }
+
+  /**
+   * 举报评论
+   */
+  static reportComment(commentId: number, reason: string): Promise<void> {
+    return axios.post(`${API_BASE_URL}/comments/${commentId}/report`, { reason });
+  }
+}
+
+export default CommentAPI;
\ No newline at end of file
diff --git a/src/api/otherType.ts b/src/api/otherType.ts
new file mode 100644
index 0000000..60523d0
--- /dev/null
+++ b/src/api/otherType.ts
@@ -0,0 +1,164 @@
+// 认证相关类型
+export interface LoginRequest {
+  email: string;
+  password: string;
+}
+
+export interface LoginResponse {
+  user: string;
+  token: string;
+  refreshToken: string;
+}
+
+export interface CommonResponse<T= null> {
+    code: number;       
+    message: string;     
+    data: T;          
+}
+
+// 作品相关类型
+export interface Work {
+  size: string;
+  data(data: any): unknown;
+  artist: string;
+  quality: string;
+  genre: string[];
+  id: number;
+  title: string;
+  author: string;
+  authorId: number;
+  views: number;
+  likes: number;
+  categoryId: number;
+  categoryName: string;
+  description: string;
+  content: string;
+  coverUrl: string;
+  createTime: string;
+  attachments: Attachment[];
+  bugCount: number;
+  discussionCount: number;
+}
+
+export interface WorkResponse {
+  content: Work[];
+  totalElements: number;
+  totalPages: number;
+}
+
+export interface WorkFormData {
+  title: string;
+  categoryId: number;
+  description: string;
+  content: string;
+  coverFile?: File;
+  attachments?: File[];
+}
+
+// Bug反馈相关类型
+export interface BugReport {
+  id: number;
+  title: string;
+  description: string;
+  severity: 'low' | 'medium' | 'high';
+  status: 'open' | 'resolved' | 'wontfix';
+  reporter: string;
+  reporterId: number;
+  workId: number;
+  createTime: string;
+}
+
+// 讨论区相关类型
+export interface Discussion {
+  id: number;
+  title: string;
+  content: string;
+  author: string;
+  authorId: number;
+  workId: number;
+  isPinned: boolean;
+  commentCount: number;
+  createTime: string;
+  lastUpdateTime: string;
+}
+
+export interface DiscussionFormData {
+  workId: number;
+  title: string;
+  content: string;
+}
+
+// 评论相关类型
+export interface Comment {
+  id: number;
+  author: string;
+  avatar: string;
+  content: string;
+  likes: number;
+  replyCount: number;
+  createTime: string;
+  replies?: CommentReply[];
+}
+
+export interface CommentFormData {
+  postId: number; // 可以是作品ID或讨论区ID
+  content: string;
+  parentId?: number; // 用于回复评论
+}
+
+export interface CommentReply {
+  id: number;
+  author: string;
+  avatar: string;
+  content: string;
+  likes: number;
+  createTime: string;
+}
+
+export interface ReplyFormData {
+  content: string;
+}
+
+// 分区相关类型
+export interface Category {
+  id: number;
+  name: string;
+  description?: string;
+  parentId?: number | null;
+  coverUrl?: string;
+  createdAt?: string;
+  updatedAt?: string;
+}
+
+export interface CategoryDTO extends Category {
+  children?: CategoryDTO[];
+  workCount?: number;
+}
+
+// 用户相关类型
+export interface User {
+  id: number;
+  username: string;
+  email: string;
+  avatar?: string;
+  role: 'user' | 'admin';
+  createdAt: string;
+  worksCount: number;
+  completedWorks: number;
+}
+
+// 通用类型
+export interface Attachment {
+  id: number;
+  name: string;
+  url: string;
+  size: string;
+}
+
+// API响应通用类型
+export interface ApiResponse<T> {
+  success: boolean;
+  data?: T;
+  message?: string;
+  error?: string;
+}
\ No newline at end of file
diff --git a/src/api/workApi.ts b/src/api/workApi.ts
new file mode 100644
index 0000000..d624821
--- /dev/null
+++ b/src/api/workApi.ts
@@ -0,0 +1,105 @@
+import axios from 'axios';
+import type { Work, WorkResponse, WorkFormData, BugReport, Discussion } from './otherType';
+
+const API_BASE_URL = '/api';
+
+class WorkAPI {
+  /**
+   * 获取作品列表（支持分页、分类筛选和搜索）
+   */
+  static getWorks(params?: {
+    categoryId?: number;
+    page?: number;
+    size?: number;
+    search?: string;
+  }): Promise<WorkResponse> {
+    return axios.get<WorkResponse>(`${API_BASE_URL}/works`, { params })
+      .then(response => response.data);
+  }
+
+  /**
+   * 获取单个作品详情
+   */
+  static getWorkById(id: number): Promise<Work> {
+    return axios.get<Work>(`${API_BASE_URL}/works/${id}`)
+      .then(response => response.data);
+  }
+
+  /**
+   * 创建新作品
+   */
+  static createWork(data: WorkFormData): Promise<Work> {
+    return axios.post<Work>(`${API_BASE_URL}/works`, data)
+      .then(response => response.data);
+  }
+
+  /**
+   * 更新作品信息
+   */
+  static updateWork(id: number, data: WorkFormData): Promise<Work> {
+    return axios.put<Work>(`${API_BASE_URL}/works/${id}`, data)
+      .then(response => response.data);
+  }
+
+  /**
+   * 删除作品
+   */
+  static deleteWork(id: number): Promise<void> {
+    return axios.delete(`${API_BASE_URL}/works/${id}`);
+  }
+
+  /**
+   * 点赞作品
+   */
+  static likeWork(id: number): Promise<void> {
+    return axios.post(`${API_BASE_URL}/works/${id}/like`);
+  }
+
+  /**
+   * 根据作者查询作品
+   */
+  static getWorksByAuthor(author: string): Promise<Work[]> {
+    return axios.get<Work[]>(`${API_BASE_URL}/works/byAuthor`, { params: { author } })
+      .then(response => response.data);
+  }
+
+  /**
+   * 获取作品Bug反馈列表
+   */
+  static getBugReports(workId: number): Promise<BugReport[]> {
+    return axios.get<BugReport[]>(`${API_BASE_URL}/works/${workId}/bugs`)
+      .then(response => response.data);
+  }
+
+  /**
+   * 提交Bug反馈
+   */
+  static reportBug(workId: number, data: {
+    title: string;
+    description: string;
+    severity: 'low' | 'medium' | 'high';
+  }): Promise<void> {
+    return axios.post(`${API_BASE_URL}/works/${workId}/bugs`, data);
+  }
+
+  /**
+   * 获取作品讨论区列表
+   */
+  static getDiscussions(workId: number): Promise<Discussion[]> {
+    return axios.get<Discussion[]>(`${API_BASE_URL}/works/${workId}/discussions`)
+      .then(response => response.data);
+  }
+
+  /**
+   * 创建新讨论
+   */
+  static createDiscussion(data: {
+    workId: number;
+    title: string;
+    content: string;
+  }): Promise<void> {
+    return axios.post(`${API_BASE_URL}/discussions`, data);
+  }
+}
+
+export default WorkAPI;
\ No newline at end of file
