所有文章 > API开发 > 使用功能标记增强API稳定性
使用功能标记增强API稳定性

使用功能标记增强API稳定性

功能标记是代码中的决策点,可在运行时启用或禁用功能,而无需重新部署或重新启动应用程序。功能标记通常与前端切换相关联,但它也为后端 API 管理提供了强大的功能。

除了简单的开/关开关外,功能标记还允许有针对性地推出、基于百分比的曝光和微调实验 – 所有这些对于管理 API 版本、确保顺利推出和最大限度地降低风险都至关重要。在这篇文章中,我们将探讨使用功能标记来管理依赖项、控制速率限制和增强 API 稳定性的实用方法。

使用功能开关管理第三方依赖项

某些 API 依赖第三方服务来实现基本功能,例如支付处理、数据丰富或消息传递。然而,这些依赖关系会引入故障点,如果发生停机,可能会破坏 API 的功能。

传统上,切换到备份供应商需要更改代码并通过CI/CD 管道重新部署— 这个过程可能很慢并且容易出现瓶颈,尤其是在具有严格变更控制流程或复杂、单片代码库的大型组织中。合并冲突和较长的审核周期可能会进一步延迟切换,从而延长服务中断。我在开发一种依赖外部端点从区块链获取交易数据的加密货币恢复服务时遇到了这个问题。该服务中断并导致一些关键客户的几次交易延迟,并且花了近一周的时间才将备份服务部署到位。

功能标记提供了更敏捷的解决方案。使用功能标记来控制备份供应商的代码路径,您可以几乎实时地从一个 API 供应商动态切换到另一个 API 供应商(实际更新速度取决于功能标记供应商)。如果主服务发生故障,只需从管理控制台切换功能标记即可将流量重定向到备份供应商,而无需进行新的部署。这种灵活性使您的 API 保持弹性和响应能力,最大限度地减少停机时间并为您的客户提供更好的体验。

要实施此策略,请提前在代码库中准备备用 API 集成。使用功能标志在主集成和备份集成之间切换。然后,该标志可以根据您的规则控制哪个供应商处于活动状态。您甚至可以使用可观察性工具配置集成

细粒度速率限制的功能标志

速率限制是 API 管理的一个重要方面。速率限制器集成到应用程序堆栈中的点可能会有所不同。但是,本节将讨论更复杂的速率限制策略

例如,内部管理端点处理的请求可能比面向公众的 API 少,而某些公共 API 可能比其他 API 占用更多资源。使用功能标记指定不同端点的速率限制策略,您可以根据实时数据和业务逻辑微调速率限制,确保最佳性能和用户体验。以下只是您可以使用功能标记创建的速率限制策略的几个示例:

  • 特定于账户的速率限制:为不同类型的用户设置不同的速率限制,例如免费层账户与高级层账户。
  • 基于时间的速率限制:在高峰使用时段应用更严格的速率限制,以防止过载,并在非高峰时段放宽速率限制
  • 上下文速率限制:基于自定义业务规则(例如地理位置、特定 IP 范围或使用历史记录)的速率限制。

使用功能标记进行速率限制的最大优势之一是能够实时动态调整限制,而无需重新部署应用程序。这在立即响应恶意用户攻击 API 端点等威胁时尤其重要

然而,在应用层集成速率限制会导致业务逻辑和速率限制策略之间紧密耦合,从而可能使您的架构复杂化。还必须考虑是否应在中间件或网络层管理速率限制,以避免混淆并保持清晰度。

使用功能开关管理向后兼容的更改

尽管 API 的向后兼容更改不会造成破坏,但这些更改仍然可能包含有风险的行为更改

使用功能标记,您可以定义定位规则,根据某些用户属性向特定内部用户展示新版本,所有这些都直接在功能标记平台 UI 中进行管理 – 无需对用户 ID 进行硬编码。此设置允许团队在生产环境中测试更改并反复优化它们,从而确保稳定性和可靠性。

功能开关还提供了一种可控的方式来逐步发布此类变更

使用功能开关管理向后不兼容的更改

向后不兼容的更改会给 API 管理带来重大风险,因为对 API 契约的任何非附加更改都可能破坏下游客户端

功能标记允许您动态管理多个版本,而不是进行硬切换。已准备好使用新 API 的客户端可以通过标头选择加入,而其他客户端则保留在旧版本上。一些功能标记工具甚至提供每个版本的调用量和每个版本的客户端的遥测数据,让您更深入地了解版本迁移策略。但是,您也可以自行测量此类指标。

此外,功能标记可实现在新版本中进行更精细的实验。例如,您可以仅向最近激活的最新版本的 Beta 用户发布实验性功能。如果没有功能标记,随着情况变得越来越复杂,管理这种逻辑很快就会成为一场维护噩梦。

避免功能开关的常见陷阱

功能标记是一种强大的工具,但如果使用不当,很快就会变成反模式。让我们来探讨一些最常见的陷阱和避免这些陷阱的最佳实践。

  1. 累积技术债务和标志膨胀:确定您的功能标志是永久的还是临时的。如果它们只是为了暂时降低发布风险,请在其目的实现后立即将其移除。如果无限期地留在代码库中,它们将成为技术债务的来源。为了避免这种情况,请为每个功能标志建立一个明确的生命周期,并将功能标志移除作为“完成定义”的一部分。
  2. 测试复杂性增加:每个功能标记都会有效增加您的测试范围,需要验证各种标记状态。如果一个功能中有多个功能标记,则复杂性会增加。要有效地测试您的功能,请将标记逻辑与功能实现分开。这样,您就可以将测试重点放在每个功能代码路径的核心功能上,而无需检查每个可能的标记组合。此外,请考虑所有标记组合是否都具有相同的风险或影响。优先测试最有可能使用的组合或可能导致严重故障的组合。
  3. 针对标记更改设置自定义角色和审批流程:功能标记通过将发布与部署分离并授权非技术用户拥有功能发布来提高生产力。但是,功能标记更改仍应与代码更改一样受到同等程度的审查。实施强大的变更控制流程,包括审批和基于角色的访问控制,以确保标记得到安全且一致的处理。

使用功能开关管理 API 变更

总而言之,功能标记可以成为管理 API 更改的强大工具,允许团队逐步推出更新、针对特定用户并在发布 API 更改时保持灵活性。与任何强大的工具一样,它们的价值在于如何周到地应用它们。通过采用最佳实践(例如严格的测试、明确的治理和及时的清理),您可以充分利用功能标记的潜力,同时保持 API 策略的清洁、可扩展和可维护。

原文地址:https://nordicapis.com/enhancing-api-stability-with-feature-flags/

#你可能也喜欢这些API文章!