通过 Rest 读取 YAML 配置 API
Read YAML config through Rest API
我有一个非常复杂的系统,它使用多种语言和框架 (Java Python Scala Bash)。在每个模块中,我需要检索相似且经常更改的配置值。目前我正在维护多个包含大量重复项的 conf 文件。
我想知道是否有开箱即用的 RestAPI 可以按需从远程位置检索变量。
我现在设法找到的所有方法都是从远程源加载整个文件的方法,这是我的一半解决方案:
YAML.parse(open('https://link_to_file/file.yaml'))
我的目标是直接调用,但我没有找到线索。
MyRemoteAPI.get("level1.level2.x")
P.S
YAML 对我来说不是强制性解决方案,我愿意接受建议。
我不知道开箱即用 API,但构建起来相当简单。创建一个将读取 YAML 文件并遍历到适当键的服务。例如使用像 Ruby (+Rails) 这样的动态语言,你可以做类似
def value
config = YAML.load_file '/local/path/to/config.yaml'
render plain: config.dig(params[:key].split('.'))
end
dig
本质上遍历一个结构,如果没有找到键,则安全地 returns nil,所以这个 returns 所请求路径的 "leaf" 处的值.
您可能还想将结构缓存在内存中以防止不断地从文件中读取,例如可以做类似 @@config ||= YAML.parse(open('https://link_to_file/file.yaml'))
或 config = Rails.cache.fetch('config', expire_in: 1.hour) { ... }
的事情。 And/or 缓存 API 的 HTTP 响应。
我有一个非常复杂的系统,它使用多种语言和框架 (Java Python Scala Bash)。在每个模块中,我需要检索相似且经常更改的配置值。目前我正在维护多个包含大量重复项的 conf 文件。 我想知道是否有开箱即用的 RestAPI 可以按需从远程位置检索变量。
我现在设法找到的所有方法都是从远程源加载整个文件的方法,这是我的一半解决方案:
YAML.parse(open('https://link_to_file/file.yaml'))
我的目标是直接调用,但我没有找到线索。
MyRemoteAPI.get("level1.level2.x")
P.S YAML 对我来说不是强制性解决方案,我愿意接受建议。
我不知道开箱即用 API,但构建起来相当简单。创建一个将读取 YAML 文件并遍历到适当键的服务。例如使用像 Ruby (+Rails) 这样的动态语言,你可以做类似
def value
config = YAML.load_file '/local/path/to/config.yaml'
render plain: config.dig(params[:key].split('.'))
end
dig
本质上遍历一个结构,如果没有找到键,则安全地 returns nil,所以这个 returns 所请求路径的 "leaf" 处的值.
您可能还想将结构缓存在内存中以防止不断地从文件中读取,例如可以做类似 @@config ||= YAML.parse(open('https://link_to_file/file.yaml'))
或 config = Rails.cache.fetch('config', expire_in: 1.hour) { ... }
的事情。 And/or 缓存 API 的 HTTP 响应。