from typing import Any, Dict, List, Optional, Union from fastapi import status from fastapi.responses import JSONResponse class APIResponse: """API标准响应格式工具类""" @staticmethod def success( data: Any = None, message: str = "操作成功", code: int = 200 ) -> Dict[str, Any]: """ 成功响应 Args: data: 响应数据 message: 响应消息 code: 状态码 Returns: 标准响应格式的字典 """ return { "success": True, "code": code, "message": message, "data": data } @staticmethod def error( message: str = "操作失败", code: int = 400, data: Any = None ) -> Dict[str, Any]: """ 错误响应 Args: message: 错误消息 code: 错误状态码 data: 附加错误数据 Returns: 标准响应格式的字典 """ return { "success": False, "code": code, "message": message, "data": data } @staticmethod def json_response( data: Any = None, message: str = "操作成功", code: int = 200, success: bool = True, status_code: int = status.HTTP_200_OK, headers: Dict[str, str] = None ) -> JSONResponse: """ 返回JSONResponse对象 Args: data: 响应数据 message: 响应消息 code: 业务状态码 success: 是否成功 status_code: HTTP状态码 headers: 自定义响应头 Returns: JSONResponse对象 """ content = { "success": success, "code": code, "message": message, "data": data } return JSONResponse( content=content, status_code=status_code, headers=headers ) # 常用响应码封装 @classmethod def ok(cls, data: Any = None, message: str = "操作成功") -> Dict[str, Any]: """200 成功""" return cls.success(data, message, 200) @classmethod def created(cls, data: Any = None, message: str = "创建成功") -> Dict[str, Any]: """201 创建成功""" return cls.success(data, message, 201) @classmethod def accepted(cls, data: Any = None, message: str = "请求已接受") -> Dict[str, Any]: """202 已接受""" return cls.success(data, message, 202) @classmethod def no_content(cls) -> Dict[str, Any]: """204 无内容""" return cls.success(None, "无内容", 204) @classmethod def bad_request(cls, message: str = "请求参数错误") -> Dict[str, Any]: """400 请求错误""" return cls.error(message, 400) @classmethod def unauthorized(cls, message: str = "未授权") -> Dict[str, Any]: """401 未授权""" return cls.error(message, 401) @classmethod def forbidden(cls, message: str = "禁止访问") -> Dict[str, Any]: """403 禁止""" return cls.error(message, 403) @classmethod def not_found(cls, message: str = "资源不存在") -> Dict[str, Any]: """404 不存在""" return cls.error(message, 404) @classmethod def server_error(cls, message: str = "服务器内部错误") -> Dict[str, Any]: """500 服务器错误""" return cls.error(message, 500)