← 中文资源

简体中文版本

判定 API 版本的生命周期阶段

根据版本号与废弃记录(公告时间与下线时间),返回该版本在指定评审时刻处于现行、已废弃还是已下线。

阅读英文原文

任务

给定版本号、评审时刻以及可选的废弃记录,返回该版本当前所处阶段;时间边界要按 ISO 字符串归一化后比较。

契约

  • 输入:JSON 对象:{ version, now, deprecation?: { announcedAt, sunsetAt } }
  • 输出:JSON 对象:{ version, stage }

样例

  1. 输入 {"version":"2024-06","now":"2024-03-01T00:00:00Z","deprecation":{"announcedAt":"2024-06-01T00:00:00Z","sunsetAt":"2024-12-01T00:00:00Z"}} -> 期望 {"version":"2024-06","stage":"current"}。在公告日之前,该版本仍属现行。
  2. 输入 {"version":"2024-06","now":"2024-09-01T00:00:00Z","deprecation":{"announcedAt":"2024-06-01T00:00:00Z","sunsetAt":"2024-12-01T00:00:00Z"}} -> 期望 {"version":"2024-06","stage":"deprecated"}。该版本已公告将被移除,但尚未到下线时间。

参考实现

function solve({ version, now, deprecation }) {
      if (!deprecation) return { version, stage: 'current' };
      if (now >= deprecation.sunsetAt) return { version, stage: 'sunset' };
      if (now >= deprecation.announcedAt) return { version, stage: 'deprecated' };
      return { version, stage: 'current' };
    }

为什么有效

API 的可移植性取决于使用方能否知道某个版本何时停止支持。把阶段判断写成函数,能让发布说明与废弃响应头保持一致。

ISO 时间戳要先归一化再比较;到达下线时间边界即属于已下线。