69 lines
1.4 KiB
Python
69 lines
1.4 KiB
Python
"""
|
||
统一 API 响应格式
|
||
|
||
遵循 AGENTS.md 规范:
|
||
成功:{ "code": 0, "message": "success", "data": {} }
|
||
失败:{ "code": 非0错误码, "message": "错误描述", "data": null }
|
||
"""
|
||
|
||
from typing import Any, Generic, TypeVar
|
||
|
||
from pydantic import BaseModel, Field
|
||
|
||
T = TypeVar("T")
|
||
|
||
|
||
class ApiResponse(BaseModel, Generic[T]):
|
||
"""统一 API 响应模型"""
|
||
|
||
code: int = Field(description="状态码,0 表示成功")
|
||
message: str = Field(description="描述信息")
|
||
data: T | None = Field(default=None, description="响应数据,失败时为 null")
|
||
|
||
|
||
def success_response(data: Any = None, message: str = "success") -> dict:
|
||
"""
|
||
构建成功响应
|
||
|
||
Args:
|
||
data: 响应数据,可为任意 JSON 可序列化类型
|
||
message: 成功描述
|
||
|
||
Returns:
|
||
符合规范的响应字典
|
||
"""
|
||
return {
|
||
"code": 0,
|
||
"message": message,
|
||
"data": data,
|
||
}
|
||
|
||
|
||
def error_response(code: int, message: str) -> dict:
|
||
"""
|
||
构建失败响应
|
||
|
||
Args:
|
||
code: 非零错误码
|
||
message: 错误描述
|
||
|
||
Returns:
|
||
符合规范的响应字典
|
||
"""
|
||
return {
|
||
"code": code,
|
||
"message": message,
|
||
"data": None,
|
||
}
|
||
|
||
|
||
# 常用错误码
|
||
class ErrorCode:
|
||
"""错误码常量"""
|
||
|
||
UNAUTHORIZED = 401
|
||
FORBIDDEN = 403
|
||
NOT_FOUND = 404
|
||
VALIDATION_ERROR = 422
|
||
INTERNAL_ERROR = 500
|