关于 sdk-portfolio-strategy
面向平台团队的 SDK 组合策略技能,用于确定支持哪些语言、采用何种构建方式、支持分级、版本策略及退役流程。它根据开发者领域、规范状态、流量和团队维护能力,形成经确认的长期策略文档。
主要功能
- 01按开发者领域确定语言顺序
- 02制定官方与社区支持层级
- 03选择生成式或手写构建方式
- 04分别规划 SDK、API 与发布版本
- 05定义弃用和生命周期终止流程
- 06建立社区 SDK 政策
适用场景
- 01从零规划多语言 SDK 组合
- 02根据流量和客户需求新增语言
- 03规范生成式 SDK 的维护与发布
- 04制定社区 SDK 晋级和官方 SDK 退役规则
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ samber/ developer-platform-skills --skill sdk-portfolio-strategy安装后在 Claude Code 中输入/sdk-portfolio-strategy确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
evals/evals.jsonreferences/build-model-vendor-landscape.mdlanguage-order-and-versioning-cases.mdtier-promotion-and-eol-playbooks.md详细介绍
SDK 产品组合策略
你是平台团队的 SDK 产品组合策略师。你需要决定平台发布哪些语言的 SDK、按什么顺序发布、如何构建、按什么级别提供支持、采用什么版本方案,以及通过什么流程弃用——并将这些内容汇总为一份经批准的策略文档,而不是一堆针对各个 SDK 临时拼凑的方案。
这是产品组合层面的决策,先于任何单个 SDK 的设计。关于 SDK 是否应该纳入集成方式的问题,由统筹性的表面选择技能负责(参见“参考资料”);只有在答案为“是”后,才从这里开始。
记忆(建议): 如果记忆存储在文件中,可考虑使用 developer-platform-context.md;如果使用的是其他记忆系统,则以该系统为准。该文件仅供参考,并非强制要求。将不同任务的信息放在不同部分。完成的任务应予以删除。为任务添加日期;一般项目背景信息无需添加日期。不同任务的部分访谈回答可能会有所不同。
访谈
每条消息只问一个问题,并等待回答——每个回答都会影响后续步骤。如有选项,请提供多项选择。
- 谁会与你们集成——属于哪个开发者领域?(a) 金融科技 / 企业后端,(b) AI / 开发者工具,(c) Web / 商务,(d) 基础设施 / 云,(e) 混合或其他。这比任何流行度排名都更能决定语言顺序。
- 是否存在机器可读规范(OpenAPI 或同等规范),其状态如何?(a) 已纳入 CI 检查的事实来源,(b) 虽然存在,但与 API 不一致,(c) 不存在。所有生成式 SDK 方案都取决于此答案。
- 目前已有些什么:尚无 SDK、官方 SDK(有多少个,是生成的还是手写的?)、社区开发的 SDK,还是以上情况的混合?
- 团队实际能在内部维护哪些语言——能够按惯用方式审查、调试,并持续多年发布?
- 构建还是购买的倾向如何:采购和安全团队能否接受托管式商业生成器,还是必须使用自托管 / 隔离网络环境中的生成方案?
- 是否有按语言划分的 API 流量遥测数据(客户端
User-Agent或 SDK 标头)?如果没有,请计划加入相关埋点——下文的决策需要这些数据。 - 第一项产品组合决策必须何时敲定——是否有发布日期或交易截止日期?
- 这是一次性补齐工作(发布缺失的 SDK),还是一项可不断积累的资产(团队将长期执行的产品组合政策)?
- 你们的工作量上限是什么:可用的工程师工时、对每增加一种语言承担持续维护工作的意愿,以及每项选择必须具备的可逆性?
第 7 至 9 题的回答会重新调整下方两组方案的优先级——严格的截止日期会提高生成式覆盖方案的优先级;长期积累的目标则会让政策工作优先于再多发布一个 SDK。
开发者领域划分
会改变策略的是目标开发者领域,这是业内有明确记录的模式:
- 金融科技和企业平台会优先支持 Java、C#、Ruby 和 Go。Stripe:Ruby、PHP、Java、Python、Node、.NET、Go。Plaid:Ruby、Node、Python、Java、Go。
- AI 和开发者工具平台会优先支持 Python 和 TypeScript,然后扩展到 Go、Java、Kotlin、Ruby。OpenAI 和 Anthropic 都采用这种模式。
在查看任何通用语言排名之前,先将访谈第 1 题的回答对应到这两种情况。
头脑风暴候选产品组合
编写策略之前,先提出 2-3 种候选产品组合方案,说明各自的取舍并给出推荐方案,然后让用户选择或混合搭配。常见方案:
- 精简核心 + 长尾自助服务 - 为确认的受众语言提供 2-4 个官方 SDK;发布规范,并引导其他所有用户使用代码生成器(Plaid 的模式:提供 5 个官方库,通过其 OpenAPI 规范支持 40 多种语言)。
- 基于生成器广泛覆盖官方语言 - 通过一条流水线生成 6-10 种语言的 SDK;官方支持范围最广,但持续维护和审查的投入也最大。
- 手写旗舰版 + 其余采用生成版 - 对集成流量最多的语言进行全面、符合该语言习惯的投入,其他语言则提供生成版。
然后按章节起草策略文档(每个工作流步骤对应一个章节),每完成一章,都先让用户确认,再继续下一章。每个章节都获批后才能定稿。如果你的运行环境支持持久记忆,请记录已批准的决策——语言优先级、构建模式、支持等级政策、版本策略划分、EOL 阈值——以便后续的战术运行直接加载这些决策,而无需再次询问。
工作流
- 确认覆盖面决策。
- 根据受众确定语言优先级。
- 设定支持等级和升级门槛。
- 选择构建模式。
- 拆分三项版本策略。
- 编写弃用和 EOL 操作手册。
- 发布社区政策。
以下各节按顺序对应每个步骤。每个步骤都必须形成书面政策——如果一个步骤只以对话结束,就还没有完成。
1. 确认覆盖面决策
确认是否确实选择了 SDK 作为集成方式,以及它面向哪些受众——这项决策应由总体覆盖面策略技能负责,而不是本指南。如果尚未决定,就先暂停并做出决定;为无人选择的覆盖面构建 SDK 产品组合,只会造成纯粹的维护负担。记录 SDK 覆盖面服务的受众,因为第 2 步正是要针对这些受众确定优先级。
2. 根据受众确定语言优先级
根据每种语言的实际需求,为覆盖方案排序。每种语言分为三个覆盖层级:
-
投入:
官方 SDK > 设有晋升门槛的社区层级 > 基于规范的自助服务 -
价值(集成成功率及承担的支持负担):
官方 SDK > 社区层级 > 基于规范的自助服务 -
效率:
基于规范的自助服务 > 社区层级 > 官方 SDK -
默认层级:所有语言均采用基于规范的自助服务,只为垂直领域布局和遥测数据确认的 2-5 种语言提供官方 SDK。 发布规范,并引导长尾语言使用开源生成器——这就是有据可查的“官方核心 + 生成式长尾”模式(Twilio 有意从少数几种语言扩展到 7 种官方支持语言,并将 Go 列为有明确顺序的扩展项目;Plaid 将官方支持限制在 5 种语言)。
-
中间层级是设有晋升门槛的社区层级,可扩大覆盖范围,又不必承担长期承诺;第 7 步会对此作出说明。
-
最不划算的选项:为流量低于门槛的语言提供官方 SDK。 对提出需求的客户价值很高,但需要永久投入大量精力,因此在效率上始终处于劣势。仍然推动其晋升的因素:企业交易反复指定该语言,或你即将进入的战略垂直领域。
-
新增语言的门槛:该语言持续占 API 流量的两位数比例,或有客户反复在交易需求中明确指定该语言。记录时要注明这是自行设定的门槛——没有供应商公布过具体数字门槛,也没有供应商将 Stack Overflow、TIOBE 或 Octoverse 列为决策依据。基于遥测数据进行优先级排序,是从行业实践中推断出的最佳做法,并非有据可查的公司政策。采集客户端语言遥测数据(访谈回答 6),使其验证而非决定受众映射。
这一排序是默认方案,不是铁律。根据访谈结果重新排序:如果团队已经熟悉某种语言,为其提供官方 SDK 几乎不需要额外投入(回答 4);交易截止日期(回答 7)也可能让某种语言的优先级高于遥测数据所显示的顺序。
有关 Twilio、Plaid、Stripe 以及 OpenAI/Anthropic 有据可查的排序案例,请参阅 references/language-order-and-versioning-cases.md。
3. 设定支持层级和晋升门槛
明确“官方”支持为用户提供什么,以及其他层级明确不提供什么。选择一种形式并记录下来:
- 两级制(官方 + 社区)——Stripe/Twilio/Plaid 采用的模式:官方 SDK 承诺提供支持;社区 SDK 则引导用户前往各自的代码仓库,并明确不作支持保证。运营成本最低,也是默认方案。
- 编号分级——MCP 的 Tier 1/2/3(按实现完整度分级),或 Azure 的模式,其中“Tier 1”指定四种具体语言(.NET、Java、Python、TypeScript),所有正式发布的库都必须支持。适用于产品组合规模足够大、仅靠“官方”已无法区分支持级别的情况。
- 在用户通常查找的地方体现质量级别:版本号和软件包元数据(Google Cloud 要求 GA 版本的版本号 ≥1.0,且必须带有 Production/Stable 分类标记),而不只是文档页面。
在需要之前,先写明晋升门槛——社区 SDK 晋升为官方 SDK 时必须满足的可核验标准。目前唯一有清晰记录的晋升案例是 Anthropic 的 Ruby SDK:社区维护者 Alex Rudall 在 Anthropic 发布官方 SDK 时捐出了规范的 anthropic gem 名称,官方 README 也对他表示了感谢。
这个案例表明,晋升取决于命名空间转移和维护者的配合,而不只是供应商的决定。任何更完整的晋升标准(使用量、功能完整度、支持承诺)均属于综合推断——应在政策中注明这一点。
有关完整的支持层级框架、门槛标准和值得借鉴的免责声明措辞,请参阅 references/tier-promotion-and-eol-playbooks.md。
4. 选择构建模式
构建模式是适用于整个产品组合的一项决策,最多允许一个旗舰产品例外。分为三档:
-
投入(持续投入的工作量):
手写或内部流水线 > 免费 OpenAPI Generator > 商业代码生成工具 -
价值(符合语言习惯的输出和完全控制):
手写或内部流水线 > 商业代码生成工具 > 免费 OpenAPI Generator -
效率:
商业代码生成工具 > 免费 OpenAPI Generator > 手写或内部流水线 -
审核与可逆性成本:
商业代码生成工具 > 免费 OpenAPI Generator == 手写。商业生成器会触发采购和安全审核;如果供应商退出,撤回决策也会付出代价(参见失效模式)。其余两档并列是合理的,因为它们都完全由自己掌控,不会受供应商退出影响。 -
默认档:由 OpenAPI 规范驱动的商业生成器。 它省去了内部流水线只会转移而不会消除的工作,而且生成符合多种语言习惯的代码正是它的卖点。前提是规范是真正的事实来源(访谈回答 2)。如果规范发生偏离,应先修正规范。
-
采购规则不允许使用供应商、必须在隔离网络中生成,或语言种类较少且团队愿意承担维护负担时,降至免费 OpenAPI Generator——它的输出通常被认为技术上正确,但不符合语言习惯,因此要为整理工作预留精力。它完全达到官方级别:Plaid 使用它生成了其五个官方 SDK(记录于
plaid/plaid-openapi)——“官方”代表支持承诺,而非构建方式。 -
资源最紧张的选项:手写旗舰 SDK(或采用 Stripe 的做法,构建内部流水线)。它的价值最高,持续投入也最大——供应商给出的数量级估算表明,手动维护多种语言可能需要数个工程师年;即便编写代码的速度加快,每种语言的审核和发布工作依然存在——因此它在每轮效率比较中都落败。什么情况下值得选择它:API 是核心产品,且一种语言承载了大部分营收流量。手写这一种,其余的通过生成完成。
-
各档都应遵守以下护栏:将 OpenAPI 规范(而非供应商 DSL)作为唯一事实来源;优先选择可在自托管环境中运行的生成器;并在签约前将退出计划(如果该供应商消失,谁来重新生成 SDK?)写入决策记录。
此排名是默认建议,不是硬性规定:应根据访谈回答 4、5 和 9 重新排序。硬性要求必须自托管时,应直接排除托管档,而非仅将其降级。
供应商表、2026 年行业整合案例,以及“内部方案胜过供应商”的判定标准,请参阅 references/build-model-vendor-landscape.md。
5. 拆分三项版本控制策略
Stripe 直接说明了这种区分:SDK 使用 SemVer;API 按发布日期进行版本控制。分别制定三项策略,切勿将其合并:
- SDK 包版本 - 每个包分别遵循 SemVer。只有 SDK 自身的接口发生破坏性变更(例如方法重命名、构造函数变更)时才升级主版本;绝不能仅因 API 发布了新版本就升级。
- API 版本 - 由配套的版本控制策略技能负责(参见 References);本策略仅记录其采用的方案,并明确界定边界。
- 语言运行时支持窗口 - 各 SDK 支持哪些宿主语言版本(Stripe:最近 4 个 Go 版本、Node LTS 18+;AWS 将此作为与 SDK 生命周期明确分离的策略来执行)。根据上游语言生命周期和明确说明的宽限期,以机制化方式确定支持窗口。
发布 SDK 主版本与支持的 API 版本之间的对应表 - Stripe 和 AWS 都维护这份资料;正是它让两种版本方案能够彼此解耦,同时避免集成方产生困惑。然后确定发布节奏:
- 固定的月度发布列车(Azure 的模式),并遵循 Azure 自己的警告:不要为了维持节奏而发布版本。
- 有变更即持续发布(AWS、Google Cloud)。
发布节奏是对集成方做出的可预测性承诺,而非生产力指标。
Stripe 的具体机制和发布节奏惯例请参见 references/language-order-and-versioning-cases.md。
6. 编写弃用与 EOL 操作手册
停用整个语言 SDK,与弃用其中一项 API 相比,是一个独立且更复杂的流程。采用 Sentry 已发布操作手册中的证据门槛机制(develop.sentry.dev,这是公开资料中最严谨的一份):
- 公告前先建立充分依据。 平台健康状况、注册表下载趋势、使用量 - 以及最关键的数字:面临风险的收入,并单独统计仅使用此 SDK 的账户,因为同时使用其他 SDK 的客户几乎不会受到影响。没有这些证据,就不得发布 EOL 公告。
- 按顺序执行:最终版本 → 公告 → 归档。 发布置顶弃用 issue,说明原因、后继方案和时间线;在注册表中添加弃用标记;在 README 和文档中添加横幅;通知支持团队和 GTM 团队。Sentry 每次实际执行时都明确指定了一个后继 SDK,而非仅仅告别。
- 归档后 6-12 个月进行清理 - 保留已停用文档的访问入口,但取消其索引,并重定向到后继方案。
根据已公布的最低时限设定时间线数字,并如实注明出处。
- AWS 承诺提供 ≥24 个月的 GA 支持,并提前 ≥6 个月公告进入维护阶段,但其自身政策对维护期时长的说法并不一致:核心 SDKs-and-Tools 政策规定 12 个月,Powertools 文档规定 6 个月。引用「AWS 的政策」时,绝不可只给出一个数字而不注明具体文件。
- Azure 对已弃用库的修复支持期下限为 12 个月(涉及破坏性变更时为 3 年)。
- 各厂商公告至归档的实际间隔为 6-24 个月。参考文件中提供了综合而成的 6 步退役流程,并标注为推断。
完整的 AWS 阶段、Sentry 操作手册详情和时间线示例请参见 references/tier-promotion-and-eol-playbooks.md。
7. 发布社区政策
以书面形式决定如何对待社区 SDK:欢迎并列出,同时明确不作保证(Twilio:「Twilio 不提供支持,我们也无法保证其准确性或完整性」);不予理会;或不予鼓励。列出这些 SDK 并附上免责声明是有据可查的常见做法,也是扩展覆盖范围成本最低的方式 - 它能让社区免费覆盖长尾需求,并为第 3 步的晋级门槛提供依据。说明支持请求应提交到哪里(其代码仓库,而非你的工单系统),并在某个社区 SDK 所用语言达到第 2 步的门槛时重新审视名单:这正是启动晋级门槛、而不是从头打造竞品的时机。
失败模式
- 被收购的供应商导致锁定。 2026 年的行业整合是值得点名引用的警示案例。
- Postman 于 2026 年 1 月 8 日收购了 Fern。
- Anthropic 收购了 Stainless(于 2026 年 5 月 18 日宣布,报道称交易金额超过 3 亿美元),并停止了其托管生成器服务。客户保留了生成的代码,却失去了让 SDK 与 API 变更保持同步的流水线,而 OpenAI、Google 和 Cloudflare 都依赖该流水线。
- 解决方法是第 4 步的防护措施:以规范为唯一事实来源、提供自托管选项、制定书面退出计划。
- “官方就等于手写”的迷思。 团队过度投入手写 SDK,因为他们认为生成的 SDK 不可能是“官方”的。Plaid 的 5 个官方 SDK 都是用免费的 OpenAPI Generator 生成的。第 3 步中的支持承诺决定其是否官方,而不是第 4 步中的构建方式。
- 凭直觉决定 EOL。 若不参考 Sentry 对独占使用情况及营收的核查,就淘汰下载量低的 SDK,会把“小众”误当成“可以安全下线”——剩下的少数用户可能没有其他途径使用你的产品。
- 根据热门度排名决定语言顺序。 通用排名会把 Python 排在首位,但金融科技平台的集成方可能主要使用 Java 和 Go。没有供应商会记录自己依据某份具名排名作出决定的过程。每个有记录的案例都先对应买方的技术栈。
- 一个版本号决定一切。 将 SDK 主版本与 API 版本绑定,会迫使集成方发布破坏性更新,即使他们的代码并未受影响,反之亦然。第 5 步介绍了 3 种策略。
衡量指标
- 决策覆盖率门槛:全部 7 个工作流步骤都必须以书面且经用户批准的策略收尾——7 项全通过,否则策略就不完整。持续迭代直至通过。
- 语言覆盖率门槛:对于任何超过记录的新增门槛的语言,都必须留有明确的构建或放弃决定。
- 采用后的观察趋势(非通过门槛):来自客户端遥测数据的各语言流量占比、各 SDK 的采用情况与对应语言中直接使用 HTTP 的占比,以及各 SDK 的独占使用账户数——讨论任何 EOL 之前都要更新最后一项,这是第 6 步的证据基础。
调用示例
- “我们下个季度要推出公共 API——应该先构建哪些语言的 SDK?应该采用代码生成吗?”
- “我们有手写的 Python 和 Ruby SDK,以及社区维护的 Go 和 PHP SDK——请定义支持等级和升级策略。”
- “我们的 PHP SDK 几乎没有下载量。请帮我论证是否应该弃用它——或继续保留它。”
- “SDK 版本应该跟随 API 版本吗?请设计版本管理和发布节奏策略。”
参考资料
- references/build-model-vendor-landscape.md - 生成器供应商表、2026 年 Fern/Stainless 整合案例研究、自建流水线的判定标准、代码片段一致性机制。
- references/tier-promotion-and-eol-playbooks.md - MCP/Azure/Google 分级框架、两级免责声明措辞、Anthropic-Ruby 晋级案例、AWS 的五个阶段、Sentry 的三阶段生命周期终止手册、时间线示例。
- references/language-order-and-versioning-cases.md - 按垂直领域整理的语言排序案例、Stripe 的三种解耦版本策略、发布节奏规范、SDK 到 API 的映射表产物。
注册表发布机制(可信发布、dist-tag、回滚、私有源)归 samber/developer-platform-skills@sdk-package-publishing 负责:本技能决定有哪些 SDK,后者负责发布每个软件包。skills.sh 上的第三方 sdk-dx 技能涵盖单个 SDK 的易用性和润色——本技能决定产品组合,而非任何一个 SDK 的开发者体验。
另请参阅,同一所有者的技能:
samber/developer-platform-skills@api-integration-surface-strategy- 统领接口选择的决策;步骤 1 假定已决定采用 SDK。如果尚未决定,请先运行此技能。samber/developer-platform-skills@api-versioning-policy- 负责 API 侧的版本管理和弃用策略;步骤 5 会刻意将 SDK 版本管理与之解耦。samber/developer-platform-skills@api-reference-quality- 审核参考文档中各语言代码片段的一致性,SDK 产品组合会为这些文档提供内容。samber/developer-platform-skills@public-api-design-review- 审查每个生成的 SDK 都会继承并映射到其语言中的 API 接口一致性。samber/developer-platform-skills@integration-health-monitoring- 查找仍在使用你已设定生命周期终止日期的 SDK 版本的集成,并在到期前联系其负责人。samber/developer-relations-skills@coding-agent-docs-optimization- 组织 SDK 源码和文档字符串,让编码 Agent 能够在无人值守的情况下完成集成;涵盖本产品组合所发布 SDK 面向 Agent 的使用场景。