在HTTP标头中传递特性标志是个好主意吗



我的后端由多个微服务组成,这些微服务通过HTTPs相互通信。在每个服务中,都有一个简单的功能标志管理器,它从配置文件中读取并决定是否启用某个功能,类似于以下内容:

{
"feature1" : true,
"feature2" : false
}

该文件稍后由运行时读取,代码路径根据其值进行分叉:

if (IsFeatureEnabled("feature1")
{
DoThis();
}
if (IsFeatureEnabled("feature2")
{
DoThat();
}

如果特性在端点中公开,那么我想编写涵盖feature1feature2的API测试。在不必在测试运行之间修改配置的情况下,最好的方法是什么?

我想到了一个想法,可以为我的功能标志引入一些动态性,即传递所需的标志值,这些值应该覆盖请求标头中的配置值:

x-feature-flags: feature1:true,feature2:false

其中指定要打开/关闭的功能。功能管理器仍将正常读取配置,但标头中指定的任何功能都将被覆盖。有效地使它们在每次HTTP调用时都是动态的。

我的方法带来了哪些负面影响?有其他更好的方法吗?因为这感觉有点黑。

干杯。

主要的缺点是,如果该行为达到生产,人们可以利用该行为来控制实时系统的内部。说这是一个销售网站,他们关闭了";信用卡验证";特征或其他什么。

为了避免这种情况,我将抽象掉标志管理器,以便在生产环境中读取一个文件,但在测试环境中读取另一个源,该源可以由测试运行程序控制。

这样,切换行为就不是程序本身的一部分,而是程序周围环境的一部分

如果不了解你的语言、框架等,很难举出例子。如果你在一个面向对象的环境中,你可以有一个FileFlagManager和一个TestHarnessFlagManager,它们共享一个接口。

相关内容

  • 没有找到相关文章

最新更新