SuperAPI AI 工具集

api-ok-but-ignored

编程与开发

查看项目

更新于 10-17 16:16

技能介绍

用途

该技能面向调用远程写入接口的客户端代码,解决一个常见但容易被忽略的问题:写入请求返回“ok”只代表传输层成功,并不代表服务端真正保留了发送的数据。服务端可能因为过滤、去重、截断或丢弃而拒绝记录,却只在成功响应体内部的次级字段中说明原因。只根据状态码或顶层 ok 字段判断的客户端会报告完美的成功率,而远端实际为空。

主要能力

  • 将写入结果建模为三种状态而非布尔值:Ok(成功保留)、Ignored(已接受但被丢弃)、Error(从未被接受)。三态设计使调用方无法把“保留”和“丢弃”合并到同一分支,when 表达式必须同时处理两者才能编译。
  • 显式读取嵌套在每条记录内部的丢弃原因字段,而不是停留在响应外层。缺失字段视为“未报告任何丢弃”。
  • 处理服务端返回的“无丢弃”中性值(通常为 0),避免按字段存在与否而非按值判断,从而把每次成功写入都误报为告警。
  • 兼容单条记录返回对象、多条记录返回数组的两种形态,避免单条记录这一常见情况被静默跳过。
  • 将丢弃视为元数据缺陷而非网络问题:与名称或标识符相关的丢弃码会在该记录每次提交时反复出现,因此应记录为警告级别日志,并带上丢弃码、消息以及发送的值。
  • 在编写分支前区分三类非 Ok 结果:可重试(限流、临时故障,需退避重试)、凭证级终止(会话失效,需清除并让用户重新登录)、记录级终止(名称被过滤、时间戳超出接受窗口,不应重试,记录日志后继续)。
  • 为“请求从未到达服务端”的本地失败自定义错误码,使用服务端不可能产生的取值范围(如负数),避免本地失败与远端失败无法区分。

使用方式

技能给出了可适配的 Kotlin 代码结构:定义 sealed interface WriteOutcome,包含 Ok、Ignored、Error 三种数据形态;编写扩展函数从 JsonObject 中解析嵌套的丢弃字段,并在丢弃码为 0 时返回 null;根据 items 字段是 JsonArray 还是 JsonObject 取出首条记录;在 when 分支中对 Ignored 结果输出警告日志。

验证方式包括两条 grep 命令:一条查找所有仅凭响应外层判断成功的位置,另一条以大小写不敏感方式查找 ignored、rejected、discarded、partially accept 等关键词,确保同时命中结果类型与日志行。随后应向服务端提交一条故意使用畸形名称的记录,确认客户端记录的是丢弃而非成功,并确认远端确实不存在该记录。

适用场景

适用于任何向远程服务批量写入记录、且服务端可能对单条记录进行过滤或丢弃的客户端集成场景,尤其是高写入量、服务端会返回逐条判定结果的情况。

限制

资料未提供该技能支持的具体语言、框架或平台范围,也未提供收费、价格或效果数据。技能中记录的来源项目变更日志称,该检查在每个写入方法中单独存在,后续新增的写入方法不会自动继承这一检查,这是需要留意的结构性风险。