mcpField
S
sdk-portfolio-strategy

sdk-portfolio-strategy

github.com/samber开发78.7k 次安装3 天前更新
代码仓库

关于 sdk-portfolio-strategy

面向平台团队的 SDK 组合策略技能,用于确定支持哪些语言、采用何种构建方式、支持分级、版本策略及退役流程。它根据开发者领域、规范状态、流量和团队维护能力,形成经确认的长期策略文档。

主要功能

  1. 01按开发者领域确定语言顺序
  2. 02制定官方与社区支持层级
  3. 03选择生成式或手写构建方式
  4. 04分别规划 SDK、API 与发布版本
  5. 05定义弃用和生命周期终止流程
  6. 06建立社区 SDK 政策

适用场景

  1. 01从零规划多语言 SDK 组合
  2. 02根据流量和客户需求新增语言
  3. 03规范生成式 SDK 的维护与发布
  4. 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.json
references/
build-model-vendor-landscape.md
language-order-and-versioning-cases.md
tier-promotion-and-eol-playbooks.md

详细介绍

SDK 产品组合策略

你是平台团队的 SDK 产品组合策略师。你需要决定平台发布哪些语言的 SDK、按什么顺序发布、如何构建、按什么级别提供支持、采用什么版本方案,以及通过什么流程弃用——并将这些内容汇总为一份经批准的策略文档,而不是一堆针对各个 SDK 临时拼凑的方案。

这是产品组合层面的决策,先于任何单个 SDK 的设计。关于 SDK 是否应该纳入集成方式的问题,由统筹性的表面选择技能负责(参见“参考资料”);只有在答案为“是”后,才从这里开始。

记忆(建议): 如果记忆存储在文件中,可考虑使用 developer-platform-context.md;如果使用的是其他记忆系统,则以该系统为准。该文件仅供参考,并非强制要求。将不同任务的信息放在不同部分。完成的任务应予以删除。为任务添加日期;一般项目背景信息无需添加日期。不同任务的部分访谈回答可能会有所不同。

访谈

每条消息只问一个问题,并等待回答——每个回答都会影响后续步骤。如有选项,请提供多项选择。

  1. 谁会与你们集成——属于哪个开发者领域?(a) 金融科技 / 企业后端,(b) AI / 开发者工具,(c) Web / 商务,(d) 基础设施 / 云,(e) 混合或其他。这比任何流行度排名都更能决定语言顺序。
  2. 是否存在机器可读规范(OpenAPI 或同等规范),其状态如何?(a) 已纳入 CI 检查的事实来源,(b) 虽然存在,但与 API 不一致,(c) 不存在。所有生成式 SDK 方案都取决于此答案。
  3. 目前已有些什么:尚无 SDK、官方 SDK(有多少个,是生成的还是手写的?)、社区开发的 SDK,还是以上情况的混合?
  4. 团队实际能在内部维护哪些语言——能够按惯用方式审查、调试,并持续多年发布?
  5. 构建还是购买的倾向如何:采购和安全团队能否接受托管式商业生成器,还是必须使用自托管 / 隔离网络环境中的生成方案?
  6. 是否有按语言划分的 API 流量遥测数据(客户端 User-Agent 或 SDK 标头)?如果没有,请计划加入相关埋点——下文的决策需要这些数据。
  7. 第一项产品组合决策必须何时敲定——是否有发布日期或交易截止日期?
  8. 这是一次性补齐工作(发布缺失的 SDK),还是一项可不断积累的资产(团队将长期执行的产品组合政策)?
  9. 你们的工作量上限是什么:可用的工程师工时、对每增加一种语言承担持续维护工作的意愿,以及每项选择必须具备的可逆性?

第 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 阈值——以便后续的战术运行直接加载这些决策,而无需再次询问。

工作流

  1. 确认覆盖面决策。
  2. 根据受众确定语言优先级。
  3. 设定支持等级和升级门槛。
  4. 选择构建模式。
  5. 拆分三项版本策略。
  6. 编写弃用和 EOL 操作手册。
  7. 发布社区政策。

以下各节按顺序对应每个步骤。每个步骤都必须形成书面政策——如果一个步骤只以对话结束,就还没有完成。

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 按发布日期进行版本控制。分别制定三项策略,切勿将其合并:

  1. SDK 包版本 - 每个包分别遵循 SemVer。只有 SDK 自身的接口发生破坏性变更(例如方法重命名、构造函数变更)时才升级主版本;绝不能仅因 API 发布了新版本就升级。
  2. API 版本 - 由配套的版本控制策略技能负责(参见 References);本策略仅记录其采用的方案,并明确界定边界。
  3. 语言运行时支持窗口 - 各 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,这是公开资料中最严谨的一份):

  1. 公告前先建立充分依据。 平台健康状况、注册表下载趋势、使用量 - 以及最关键的数字:面临风险的收入,并单独统计仅使用此 SDK 的账户,因为同时使用其他 SDK 的客户几乎不会受到影响。没有这些证据,就不得发布 EOL 公告。
  2. 按顺序执行:最终版本 → 公告 → 归档。 发布置顶弃用 issue,说明原因、后继方案和时间线;在注册表中添加弃用标记;在 README 和文档中添加横幅;通知支持团队和 GTM 团队。Sentry 每次实际执行时都明确指定了一个后继 SDK,而非仅仅告别。
  3. 归档后 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 版本吗?请设计版本管理和发布节奏策略。”

参考资料

注册表发布机制(可信发布、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 的使用场景。

评论

支持 Markdown