136 lines
3.6 KiB
Python
136 lines
3.6 KiB
Python
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) |