当您公开公共API时,如何处理不变量(业务规则)中的破坏性更改
我开始研究关于公共API的良好实践,特别是关于如何处理破坏性的更改。有很多与版本控制(或非版本控制!)相关的技术细节,但我更感兴趣的是代码库的含义 设想一个基本场景,其中有一条业务规则“密码必须至少有10个字符”。您在公共API中公开了一个“创建用户”场景,接受密码 您有数百个客户端在使用它,有一天,您决定将业务规则更改为“密码必须至少包含15个字符”。即使您没有更改API签名和有效负载的语义,您也只是在API中引入了突破性的更改,因为您更改了此API的行为 你会怎么处理这件事 我只发现错误的方法:当您公开公共API时,如何处理不变量(业务规则)中的破坏性更改,api,domain-driven-design,Api,Domain Driven Design,我开始研究关于公共API的良好实践,特别是关于如何处理破坏性的更改。有很多与版本控制(或非版本控制!)相关的技术细节,但我更感兴趣的是代码库的含义 设想一个基本场景,其中有一条业务规则“密码必须至少有10个字符”。您在公共API中公开了一个“创建用户”场景,接受密码 您有数百个客户端在使用它,有一天,您决定将业务规则更改为“密码必须至少包含15个字符”。即使您没有更改API签名和有效负载的语义,您也只是在API中引入了突破性的更改,因为您更改了此API的行为 你会怎么处理这件事 我只发现错误的方
在你的工作中有没有关于这方面的实际经验?最简单的方法就是与你的客户沟通,并在几周/几个月前提醒他们即将发生的变化。通过这种方式,他们可以为突破性的变化做好准备 如果您绝对必须支持旧客户端,另一个选项是将域保持不变为10,但为create user场景添加一个额外的api调用,用于检查密码长度并验证密码在域外的长度为15。然后,鼓励用户迁移到新的CreateUser端点。这适用于像这样的简单情况,但对于复杂的不变量,或者如果您的域用于不同的上下文(多个API、桌面应用程序等),则很难做到这一点
如果您决定采用这种方法,一个好的技巧是确保您有指标来了解有多少客户端使用旧端点,有多少客户端使用新端点。当您达到某个阈值时,您可以关闭旧端点并将最小密码长度15不变量从Api移动到域,最简单的方法就是与您的客户端通信,并在几周/几个月前警告他们即将发生的更改。通过这种方式,他们可以为突破性的变化做好准备 如果您绝对必须支持旧客户端,另一个选项是将域保持不变为10,但为create user场景添加一个额外的api调用,用于检查密码长度并验证密码在域外的长度为15。然后,鼓励用户迁移到新的CreateUser端点。这适用于像这样的简单情况,但对于复杂的不变量,或者如果您的域用于不同的上下文(多个API、桌面应用程序等),则很难做到这一点 如果您决定采用这种方法,一个好的技巧是确保您有指标来了解有多少客户端使用旧端点,有多少客户端使用新端点。当达到某个阈值时,可以关闭旧端点,并将最小密码长度15不变量从Api移动到域