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

5 天前
 chesha1

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

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

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

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

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

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

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

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

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

© 2021 V2EX