一个服务的配置文件用什么格式(比如 xml, json, yaml)比较好?

67 天前
 chesha1

很多服务需要一个配置文件,有一些常见格式:

一个服务用什么格式的配置文件,这个有什么考量吗?用什么比较好?

3954 次点击
所在节点    程序员
55 条回复
daimaosix
67 天前
我比较喜欢 yaml
baobao1270
67 天前
选你用的语言
如果用的 JavaScript ,那就用 js 文件做配置
如果用的 Python ,那么就用 py 文件作为配置
直接 code as configuration
dcsuibian
67 天前
@pb7412221 JSON5 不是 JSON 的新版本,JSON 已经定死了,JSON5 是一种新的数据格式。相对来说很冷门,而且得引入新的解析器
flyqie
67 天前
@agagega #17

人类读写在缩进上感觉 toml 要好于 yaml 。
lrh3321
67 天前
手写 toml 不容易犯错误。yaml 在编辑器里写也还好。
fenglala
67 天前
推荐 json5 ,解决了 json 好多弊端,注释什么的都没问题。量大的话不推荐 yaml ,在公司见了上万行的 yaml 格式 git 仓库配置文件,几乎完全不可读,加一行加到哪都很难找。
Pony69
67 天前
简单 toml ,复杂 yaml
henix
67 天前
最简单的直接用环境变量
没有复杂嵌套的用 ini
复杂的用 json5 或 json
不推荐 yaml ,这玩意一旦规模上去之后,可读性大幅下降。而且 spec 相当复杂,不同语言实现出来的 yaml parser 可能有功能上的差异,导致同一个配置文件,无法在不同语言之间迁移
zhuangzhuang1988
67 天前
用 Python ,lua 当配置文件啊。
lisxour
67 天前
ini toml yaml .env 这几个都是对人类比较友好的,好改很多,结构也比较扁平,json 、xml ,可以存,但是如果经常需要人工修改的场景不建议用
lisxour
67 天前
@lizhien 不支持直接写数组啥意思,xxx = ["a", "b"]就是数组结构啊
abcbuzhiming
67 天前
@kenvix 因为 k8s 用 yaml 这东西,而 k8s 用这东西的核心原因是,k8s 工程师写配置文件的量非常大,几万行的配置文件和家常便饭一样。典型的写多读少。对于他们来说,节省几个字符串带来的收益海了去了,所以 yaml 才是这个样子。
但是对但部分其它人来讲,配置文件永远是读多写少。yaml 这种读起来一泡污的语法就一点都不友好了
abcbuzhiming
67 天前
@GeekGao 这上面写错了,yaml 根本就不易读,人眼的生物特性,更适合横向扫描,而不是纵向位移。这就决定来了 yaml 读起来一点都不友好。而且 yaml 之所以设计成这样就是因为 k8s 的配置代码量非常大,所以少写一个 key 的收益就特别大。yaml 是少见的专门针对写多读少环境的配置语法
lizhien
67 天前
@lisxour 这样

[
1,2,3
]
GeekGao
67 天前
@abcbuzhiming 我写了很多年 Python ,我认为 YAML 易读。 这个理由很简单,就像你 “这上面写错了,yaml 根本就不易读” 这句话讲的很轻松那样。
wheat0r
67 天前
如果配置不是太复杂,toml 挺好用,而且 toml 并不算小众,传统软件的配置文件都是这个风格的,只是名字不叫 toml 。
yaml 的易读程度和屏幕高度正相关,在 16:9 屏幕上就是屎,9:16 屏幕上就好不少。
abcbuzhiming
66 天前
@GeekGao 我给了理由,不是随便轻松的讲话,人眼的特性就更适合横向扫描。况且你是不是觉得 python 和 yaml 都是有缩进,就觉得这两个玩意一样?你见过 yaml 子项的数量多到可以横跨整个屏幕高度的情况没?
GeekGao
66 天前
@abcbuzhiming 我还没有遇到感觉很复杂的 case ,我遇到的最复杂的例子是 k8s depolyment 的配置,几百行。
问题是我不需要修改所有配置,所以也感受不到你所述 “横向扫描” 困难的问题。
abcbuzhiming
66 天前
@GeekGao 我前面说了,yaml 这个东西之所以被 k8s 广泛采用,就是因为 k8s 的工程师动不动就要些几万行的配置文件。在这种数量级下,同样的配置项,少写一个 key 就成为了收益性很高的一件事。所以 k8s 才选了这个格式作为自己的配置文件。
你自己只需要写几百行 k8s 配置,那你一个大类下面有几个子类不得了了,那自然是体会不到这玩意难读的。实际上国外社区已经不止一次抨击过 yaml 作为 k8s 的配置文件“难以阅读”了。就在于我说的,它们说的这种“难读”的 yaml ,一个大类下面子类的数量,多到可以横跨好几个屏幕高度。看着看着眼睛就花了
GeekGao
66 天前
@abcbuzhiming "一个大类下面子类的数量,多到可以横跨好几个屏幕高度。" 有在线的例子可以分享吗 ? 我去感受一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1073113

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX