refactor(pojo): 修正Article类中attributeid字段的列名拼写
feat(controller): 在ArticleController中添加根据属性ID获取文章的方法 style(repository): 在CategoryRepository方法上添加空行提高可读性 chore: 移除MyAfterProjecyApplication中多余的MapperScan注解
This commit is contained in:
136
README_API.md
136
README_API.md
@@ -2,7 +2,7 @@
|
||||
|
||||
## 项目概述
|
||||
|
||||
MyAfterProject是一个基于Spring Boot的后端博客系统,提供文章管理、留言板等功能的API接口。本文档旨在帮助前端开发者理解和使用这些API接口。
|
||||
MyAfterProject是一个基于Spring Boot的后端博客系统,提供文章管理、留言板等功能的RESTful API接口。系统集成了Spring Security和JWT认证机制,确保API的安全性和权限控制。本文档旨在帮助前端开发者理解和使用这些API接口,包括接口规范、请求/响应格式、认证方式及最佳实践。
|
||||
|
||||
## 技术栈
|
||||
|
||||
@@ -10,8 +10,10 @@ MyAfterProject是一个基于Spring Boot的后端博客系统,提供文章管
|
||||
- **ORM框架**: Spring Data JPA
|
||||
- **数据库**: MySQL
|
||||
- **缓存**: Redis
|
||||
- **认证**: Spring Security + JWT
|
||||
- **API风格**: RESTful
|
||||
- **认证授权**: Spring Security + JWT Token
|
||||
- **API风格**: RESTful API
|
||||
- **错误处理**: 全局异常处理机制
|
||||
- **权限控制**: 基于角色的访问控制(RBAC)
|
||||
|
||||
## 项目结构
|
||||
|
||||
@@ -19,29 +21,45 @@ MyAfterProject是一个基于Spring Boot的后端博客系统,提供文章管
|
||||
src/main/java/com/qf/myafterprojecy/
|
||||
├── controller/ # 控制器层,处理HTTP请求
|
||||
│ ├── ArticleController.java # 文章相关API
|
||||
│ └── MessageController.java # 留言相关API
|
||||
│ ├── MessageController.java # 留言相关API
|
||||
│ └── AuthController.java # 认证相关API
|
||||
├── pojo/ # 实体类和数据传输对象
|
||||
│ ├── Article.java # 文章实体
|
||||
│ ├── Message.java # 留言实体
|
||||
│ ├── ResponseMessage.java # 统一响应消息格式
|
||||
│ └── dto/ # 数据传输对象
|
||||
│ ├── ArticleDto.java # 文章DTO
|
||||
│ └── MessageDto.java # 留言DTO
|
||||
│ ├── Article.java # 文章实体
|
||||
│ ├── Message.java # 留言实体
|
||||
│ ├── User.java # 用户实体
|
||||
│ ├── Role.java # 角色实体
|
||||
│ ├── ResponseMessage.java # 统一响应消息格式
|
||||
│ └── dto/ # 数据传输对象
|
||||
│ ├── ArticleDto.java # 文章DTO
|
||||
│ └── MessageDto.java # 留言DTO
|
||||
├── repository/ # 数据访问层
|
||||
│ ├── ArticleRepository.java # 文章数据访问
|
||||
│ └── MessageRepository.java # 留言数据访问
|
||||
│ ├── ArticleRepository.java # 文章数据访问
|
||||
│ ├── MessageRepository.java # 留言数据访问
|
||||
│ ├── UserRepository.java # 用户数据访问
|
||||
│ └── RoleRepository.java # 角色数据访问
|
||||
├── service/ # 业务逻辑层
|
||||
│ ├── ArticleService.java # 文章服务实现
|
||||
│ ├── IArticleService.java # 文章服务接口
|
||||
│ ├── MessageService.java # 留言服务实现
|
||||
│ └── IMessageService.java # 留言服务接口
|
||||
│ ├── ArticleService.java # 文章服务实现
|
||||
│ ├── IArticleService.java # 文章服务接口
|
||||
│ ├── MessageService.java # 留言服务实现
|
||||
│ └── IMessageService.java # 留言服务接口
|
||||
├── config/ # 配置类
|
||||
│ ├── SecurityConfig.java # Spring Security配置
|
||||
│ └── security/ # 安全相关组件
|
||||
│ ├── JwtTokenProvider.java # JWT令牌生成器
|
||||
│ ├── JwtAuthenticationFilter.java # JWT认证过滤器
|
||||
│ └── UserDetailsServiceImpl.java # 用户认证服务
|
||||
├── GlobalExceptionHandler.java # 全局异常处理器
|
||||
└── MyAfterProjecyApplication.java # 应用入口
|
||||
```
|
||||
|
||||
## 配置信息
|
||||
|
||||
后端服务默认运行在 `http://localhost:8080` 端口,前端项目需要将API请求指向该地址。
|
||||
- **服务地址**: `http://localhost:8080`
|
||||
- **API基础路径**: `/api`
|
||||
- **认证头**: `Authorization: Bearer {token}`
|
||||
- **默认测试账号**:
|
||||
- 作者账号: `test_author` / `password123` (拥有AUTHOR角色)
|
||||
- 管理员账号: `test_admin` / `admin123` (拥有ADMIN角色)
|
||||
|
||||
## API接口详细说明
|
||||
|
||||
@@ -178,7 +196,10 @@ POST /api/articles
|
||||
|
||||
**功能**: 创建新文章
|
||||
|
||||
**权限**: 需要AUTHOR角色
|
||||
**权限**: 需要AUTHOR角色 (通过`@PreAuthorize("hasRole('AUTHOR')")`控制)
|
||||
|
||||
**请求头**:
|
||||
- `Authorization: Bearer {token}` (必需)
|
||||
|
||||
**请求体**:
|
||||
```json
|
||||
@@ -213,7 +234,10 @@ PUT /api/articles/{id}
|
||||
|
||||
**功能**: 更新现有文章
|
||||
|
||||
**权限**: 需要AUTHOR或ADMIN角色
|
||||
**权限**: 需要AUTHOR角色 (通过`@PreAuthorize("hasRole('AUTHOR')")`控制)
|
||||
|
||||
**请求头**:
|
||||
- `Authorization: Bearer {token}` (必需)
|
||||
|
||||
**请求参数**:
|
||||
- `id`: 文章ID(路径参数)
|
||||
@@ -248,7 +272,10 @@ DELETE /api/articles/{id}
|
||||
|
||||
**功能**: 删除指定文章
|
||||
|
||||
**权限**: 需要AUTHOR或ADMIN角色
|
||||
**权限**: 需要AUTHOR或ADMIN角色 (通过`@PreAuthorize("hasRole('AUTHOR') or hasRole('ADMIN')")`控制)
|
||||
|
||||
**请求头**:
|
||||
- `Authorization: Bearer {token}` (必需)
|
||||
|
||||
**请求参数**:
|
||||
- `id`: 文章ID(路径参数)
|
||||
@@ -362,6 +389,9 @@ DELETE /api/messages/{id}
|
||||
|
||||
**权限**: 需要ADMIN角色
|
||||
|
||||
**请求头**:
|
||||
- `Authorization: Bearer {token}` (必需)
|
||||
|
||||
**请求参数**:
|
||||
- `id`: 留言ID(路径参数)
|
||||
|
||||
@@ -411,6 +441,64 @@ DTO类用于前后端数据传输,是对实体类的简化,只包含需要
|
||||
|
||||
- **ArticleDto**: 包含文章的基本信息,用于创建和更新文章
|
||||
- **MessageDto**: 包含留言的基本信息,用于创建和更新留言
|
||||
- **LoginRequest**: 登录请求参数
|
||||
- **SignupRequest**: 注册请求参数
|
||||
- **JwtResponse**: JWT认证响应
|
||||
|
||||
## 认证与授权
|
||||
|
||||
系统使用JWT (JSON Web Token) 进行身份认证。在访问需要授权的API接口时,前端需要在请求头中包含有效的JWT令牌。
|
||||
|
||||
### 获取JWT令牌
|
||||
|
||||
```
|
||||
POST /api/auth/signin
|
||||
```
|
||||
|
||||
**功能**: 用户登录并获取JWT令牌
|
||||
|
||||
**请求体**:
|
||||
```json
|
||||
{
|
||||
"username": "test_author",
|
||||
"password": "password123"
|
||||
}
|
||||
```
|
||||
|
||||
**返回数据**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "登录成功",
|
||||
"success": true,
|
||||
"data": {
|
||||
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
|
||||
"type": "Bearer",
|
||||
"id": 1,
|
||||
"username": "test_author",
|
||||
"email": "author@example.com",
|
||||
"roles": ["ROLE_AUTHOR"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 用户注册
|
||||
|
||||
```
|
||||
POST /api/auth/signup
|
||||
```
|
||||
|
||||
**功能**: 用户注册新账号
|
||||
|
||||
**请求体**:
|
||||
```json
|
||||
{
|
||||
"username": "新用户名",
|
||||
"email": "user@example.com",
|
||||
"password": "密码123",
|
||||
"role": "author" // 可选值: user, author, admin
|
||||
}
|
||||
```
|
||||
|
||||
## 前端调用示例
|
||||
|
||||
@@ -438,6 +526,14 @@ const api = axios.create({
|
||||
}
|
||||
});
|
||||
|
||||
// 认证相关API
|
||||
export const authAPI = {
|
||||
// 用户登录
|
||||
login: (credentials) => api.post('/auth/signin', credentials),
|
||||
// 用户注册
|
||||
register: (userData) => api.post('/auth/signup', userData)
|
||||
};
|
||||
|
||||
// 请求拦截器 - 添加认证token
|
||||
api.interceptors.request.use(
|
||||
config => {
|
||||
|
||||
Reference in New Issue
Block a user