Files
2026-07-13 12:37:52 +08:00

3.1 KiB
Raw Permalink Blame History

HTTP API 响应与错误规范

本文档细化 HTTP API 规范中的响应契约。鉴权相关失败由 HTTP 鉴权规范定义,当前端点覆盖范围记录在 V3 API 范围中。

1. JSON 响应包装

V3 JSON 响应默认使用 com.alibaba.nacos.api.model.v2.Result<T>

{
  "code": 0,
  "message": "success",
  "data": {}
}

端点文档必须说明 data 类型以及任何非默认 HTTP 状态。

2. 响应例外

当前有意设计的响应形态例外:

  • 文件下载端点可以返回 ResponseEntity<byte[]>
  • Copilot 流式端点返回 Server-Sent Events。
  • 健康检查 readiness 在未就绪时可以返回 HTTP 500,并携带 Result<String> 响应体。
  • 部分遗留或运维端点可以返回纯文本。只有在确认属于兼容行为后,才应保留。

3. 错误处理

标注 @NacosApi 的 Controller 使用 NacosApiExceptionHandler 处理常见 v3 错误:

异常类型 HTTP 状态 Result code 来源
NacosApiException 异常错误码 详细 API 错误码
NacosException 异常错误码 SERVER_ERROR
缺少请求参数 400 PARAMETER_MISSING
非法参数或数字格式错误 400 PARAMETER_VALIDATE_ERROR
Media type 错误 400 MEDIA_TYPE_ERROR
AccessException 403 ACCESS_DENIED
数据访问、Servlet 或 IO 失败 500 DATA_ACCESS_ERROR
未处理异常 500 通用失败

4. ExceptionHandler 收敛

Nacos 自有的 v3 HTTP API 应收敛到 @NacosApiNacosApiExceptionHandler,以获得统一异常处理。早于 v3 API 模型存在的 模块级 ExceptionHandler,不应为 v3 API 定义不同的响应形态。

插件性质的模块如果有意维护独立 API 面,可以保留自己的 ExceptionHandler。通用扩展边界由 Nacos 插件化规范定义。PrometheusApiExceptionHandler 是 这类插件式 ExceptionHandler 的例子。

已知待处理项:

  • config/server/exception/GlobalExceptionHandler 仍作用于 com.alibaba.nacos.config.server,并可能返回纯文本 ResponseEntity<String>
  • naming/exception/ResponseExceptionHandler 仍作用于 com.alibaba.nacos.naming,并可能返回纯文本 ResponseEntity<String>
  • ConfigOpenApiController 引入了 NacosApi,但当前没有标注 @NacosApi

这些项应作为待处理的收敛问题,使 Config 和 Naming 的 v3 API 使用与其他 Nacos v3 API 一致的 Result<T> 错误契约。