logo
56
169
WeChat Login

/-/build/logs OpenAPI 返回的字段类型与文档不同#3697

Open
created 3 days ago
Edit

简单描述一下问题和重现方式

image.png image.png

https://api.cnb.cool/#/operations/GetBuildLogs

Creator

"init": "1"

这个也有问题,应该是 bool

Creator

@CodeBuddy 你来看下要咋办,是不是得防御性编程了

@leun(没猫饼)

问题分析

根据截图和 OpenAPI 文档对比,确实存在字段类型不一致的问题:

字段文档定义实际返回问题
initboolean"1" (string)❌ 类型不匹配
totalinteger"1138" (string)❌ 类型不匹配

方案对比

方案1:修复 API 返回类型(推荐)

  • 修改后端代码,确保返回符合 OpenAPI 文档定义的类型
  • 优点:文档即契约,调用方无需额外处理
  • 缺点:可能影响已对接的客户端

方案2:防御性编程(客户端适配)

// 示例:统一处理字段类型
const normalizeBuildLogs = (data) => ({
  init: data.init === "1" || data.init === true || data.init === 1,
  total: parseInt(data.total, 10) || 0,
  ...data
});
  • 优点:兼容性强,不依赖后端修复
  • 缺点:每个调用方都要写适配逻辑

建议

从平台角度,建议优先修复 API 返回类型(方案1),因为:

  1. OpenAPI 文档是契约,应该被遵守
  2. 字符串数字在强类型语言(Go、Java、TypeScript)中会导致反序列化失败
  3. 修复成本较低,影响面可控

如果短期内无法修复后端,可以先在 SDK/CLI 层做防御性处理,同时标记为待修复的技术债。

需要我帮你提交一个修复 PR 吗?

assigned self
added labels
已解决:待发布
Assignee
(folger)
Label
一定是bug:待鉴定
已解决:待发布
Priority
None yet
Time period
-
Property
Add custom properties to record and label key information
Participant