- 新增`api_response.py`统一响应封装工具类,提供标准成功/错误响应构造方法 - 重构WonderQ-Admin全局异常处理器,将所有异常转换为标准响应格式 - 修改所有公共和管理端接口的返回逻辑,统一使用`code`(与HTTP状态码一致)、`msg`和`data`的三层结构 - 新增`api-response-contract.md`文档,定义完整的三端统一JSON响应规范 - 更新所有领域API文档,明确业务数据需位于`data`字段内,补充响应格式说明 - 为WonderQ-MiniAPP和WonderQ-Admin-UI新增响应解析逻辑和类型定义,自动完成协议校验和错误处理 - 更新所有测试用例,适配新的响应结构确保接口符合契约要求 - 新增`module-config-api.md`模块配置API文档,补充站点模块配置的接口约定 - 更新项目README文档,调整文档分类顺序将响应契约置于首位
40 lines
1.2 KiB
Python
40 lines
1.2 KiB
Python
from collections.abc import Mapping
|
|
from typing import Any
|
|
|
|
from fastapi.responses import JSONResponse
|
|
|
|
|
|
def success_response(data: Any, *, status_code: int = 200) -> JSONResponse:
|
|
return JSONResponse(
|
|
status_code=status_code,
|
|
content={"code": status_code, "msg": "success", "data": data},
|
|
)
|
|
|
|
|
|
def error_response(
|
|
status_code: int,
|
|
message: str,
|
|
*,
|
|
error_code: str | None = None,
|
|
details: Any = None,
|
|
) -> JSONResponse:
|
|
content: dict[str, Any] = {
|
|
"code": status_code,
|
|
"msg": message,
|
|
"data": None,
|
|
}
|
|
if error_code:
|
|
content["errorCode"] = error_code
|
|
if details:
|
|
content["details"] = details
|
|
return JSONResponse(status_code=status_code, content=content)
|
|
|
|
|
|
def exception_parts(detail: Any) -> tuple[str, str | None, Any]:
|
|
if isinstance(detail, Mapping):
|
|
message = detail.get("msg") or detail.get("message") or "请求失败"
|
|
raw_code = detail.get("errorCode") or detail.get("code")
|
|
error_code = raw_code if isinstance(raw_code, str) else None
|
|
return str(message), error_code, detail.get("details")
|
|
return str(detail or "请求失败"), None, None
|