feat(api): 实现三端统一的JSON API响应契约
- 新增`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文档,调整文档分类顺序将响应契约置于首位
This commit is contained in:
39
WonderQ-Admin/app/api_response.py
Normal file
39
WonderQ-Admin/app/api_response.py
Normal file
@@ -0,0 +1,39 @@
|
||||
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
|
||||
Reference in New Issue
Block a user