本文档详细介绍了前端与后端的API集成方案,包括统一的响应格式、错误处理机制和安全策略。
- 使用标准HTTP方法(GET、POST、PUT、DELETE)
- 资源路径清晰明确
- 统一的响应格式
后端统一返回Result格式:
{
"data": {},
"code": 0000,
"msg": "success"
}前端统一处理这种格式,提供processApiResponse工具函数。
POST /api/users/list- 获取用户列表(分页请求体:page,size,filters)GET /api/users/list- (兼容,已废弃)获取用户列表POST /api/users/create- 创建用户PUT /api/users/update- 更新用户DELETE /api/users/delete/{id}- 删除用户POST /api/users/unlock/{id}- 解锁用户
POST /api/roles/list- 获取角色列表(分页请求体:page,size,filters)GET /api/roles/list- (兼容,已废弃)获取角色列表POST /api/roles/create- 创建角色PUT /api/roles/update- 更新角色DELETE /api/roles/delete/{id}- 删除角色GET /api/roles/{id}- 获取角色详情GET /api/roles/code/{code}- 根据代码获取角色
GET /api/menus/tree- 获取菜单树POST /api/menus/create- 创建菜单PUT /api/menus/update- 更新菜单DELETE /api/menus/delete/{id}- 删除菜单POST /api/menus/list- 获取所有菜单(分页请求体:page,size,filters)GET /api/menus/list- (兼容,已废弃)获取所有菜单GET /api/menus/{id}- 获取菜单详情
GET /api/permissions/role/{roleId}- 获取角色权限POST /api/permissions/assign- 分配权限给角色POST /api/permissions/remove- 移除角色权限POST /api/permissions/list- 获取所有权限(分页请求体:page,size,filters)GET /api/permissions/list- (兼容,已废弃)获取所有权限POST /api/permissions/create- 创建权限PUT /api/permissions/update- 更新权限DELETE /api/permissions/delete/{id}- 删除权限
POST /api/auth/login- 用户登录POST /api/auth/register- 用户注册POST /api/auth/logout- 用户登出
列表接口统一使用以下请求体字段:
{
"page": 1,
"size": 10,
"filters": {
"status": "ACTIVE"
}
}前端调用示例:
await fetch('/api/users/list', {
method: 'POST',
headers: getAuthHeaders(),
body: JSON.stringify({ page: 1, size: 10, filters: { status: 'ACTIVE' } })
})// api.ts
interface BackendResult<T> {
data: T;
code: number;
msg: string;
}
export async function processApiResponse<T>(response: Response): Promise<T> {
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const result: BackendResult<T> = await response.json();
if (result.code !== 0) {
throw new Error(result.msg || `Backend error with code: ${result.code}`);
}
return result.data;
}
export function getAuthHeaders(): Record<string, string> {
return {
'Content-Type': 'application/json',
'Authorization': `Bearer ${localStorage.getItem('token')}` || ''
};
}所有服务层都使用fetch API和统一的错误处理:
// 示例:menuService.js
export const getMenuTree = async (roleId = null) => {
let url = `${BASE_URL}/menu/tree`;
if (roleId) {
url += `?roleId=${encodeURIComponent(roleId)}`;
}
const response = await fetch(url, {
method: 'GET',
headers: getAuthHeaders()
});
return processApiResponse(response);
};- 使用
@PermissionRequired注解标记需要权限的方法 - AOP切面自动检查用户权限
- 超级管理员可绕过权限检查
- 根据用户权限动态显示菜单项
- 对敏感操作进行二次权限验证
0- 成功1001- 验证错误2001- 授权错误423- 账户锁定500- 服务器内部错误
- 统一捕获和显示错误信息
- 对不同错误类型提供不同处理策略
- 用户友好的错误提示
- JWT Token认证
- 自动刷新Token机制
- 安全的Token存储
- 基于角色的访问控制(RBAC)
- 细粒度权限控制
- 操作审计日志
- 在后端创建Controller方法,返回Result格式
- 在前端创建对应的服务函数
- 更新TypeScript类型定义
- 测试API连接和错误处理
- 使用浏览器开发者工具查看网络请求
- 检查API响应格式是否符合Result规范
- 验证权限控制是否正常工作
- 合理使用缓存减少API调用
- 分页加载大数据集
- 优化数据库查询性能
- API版本管理策略
- 向后兼容性保证
- 模块化设计便于扩展