YAML 配置框架

YAML configuration framework

我有一个应用程序,我们在其中使用基于 *.conf 文件的配置框架。每个这样的文件代表一些具有配置的层,这些配置可以被覆盖或与下一层合并。还可以使用当前定义中对某些配置定义的引用,能够根据某些配置模板定义构建自定义配置...

因此实际上存在具有配置的层次结构。

我想知道是否有足够成熟的YAML框架可以提供上述功能?请指教

我确实为应用程序实现了类似的配置系统。

YAML 本身仅将流加载到本机数据结构中。您需要考虑如何定义此数据结构。有几种方法:

  • 隐含地。这是大多数人在使用带有 Python 或其他动态类型语言的 YAML 时采用的方式。您将 YAML 文件加载到 dictlist 和原子值(字符串、整数、...)的层次结构中。这样做的好处是加载后不同文件的内容不容易合并。
  • 明确。这意味着您将要将文件加载到的数据结构定义为类型。典型的静态类型语言,如 Java 或 Go。这里的主要问题是,如果您有无法使用 YAML 的 anchors/aliases 系统编码的引用(例如,因为您引用了另一个文件中的内容),您需要在类型结构中放置一个可以存在瞬态引用的位置稍后替换为实际值。
  • 基于图表。大多数 YAML 实现提供了一种将 YAML 文件加载到 节点图 的方法,其中每个节点都是一个序列、映射或标量,符合 YAML 规范。这样做的好处是您可以在节点图上实现 post 处理,然后可以将其加载到目标本机结构中。我在 go-yaml (v3) 中使用了这种方法,它支持得很好。

如果您正在搜索已经实现了大部分您想做的事情的东西,我认为您不会找到任何东西。配置的问题在于它们通常在它们包含的内容和它们应该被处理的方式上都与应用程序紧密相关。 YAML 是配置文件的几个共同点之一,这就是它经常用于它们的原因,但更复杂的功能往往在很大程度上取决于您的特定要求,因此将它们作为独立框架发布通常没有意义。