【问题标题】:Sharing Config between Node.js, React.js and Python Apps在 Node.js、React.js 和 Python 应用程序之间共享配置
【发布时间】:2019-10-25 19:40:33
【问题描述】:
我的项目目前涉及使用 Javascript 和 Python 的多个组件
- Node.js 服务器
- Python 烧瓶 API 服务器
- Python 数据处理脚本(numpy、pandas 等)
- React.js 网络客户端
- React Native 移动客户端
这些组件共享几个常见的配置值,例如服务器端组件使用的数据库连接 URI 字符串 postgresql://admin:password@localhost:5432/foobar 和客户端组件使用的 API 服务器 url https://api.example.com/v1。
问题:是否存在跨使用不同语言的组件共享配置文件的最佳做法?
例如,
所有组件(服务器端和客户端)都应该访问同一个配置文件吗?如果是这样,它应该是哪种格式,JSON、YAML 等?
是否应该所有组件共享一个公共配置文件(其中只存储公共配置值),但还应该有一个特定于该组件的第二个配置文件?
是否应该所有服务器端组件共享同一个配置文件,而客户端组件有自己的单独配置文件?
感谢您的建议:)
【问题讨论】:
标签:
javascript
python
node.js
reactjs
configuration
【解决方案1】:
我建议使用 TOML。所有主要语言都支持它,并允许使用 JSON 不支持的 cmets。
【解决方案2】:
在我看来,您会在野外看到两种主要方法。
配置文件。作为数控。提到过,您可以制作一个所有不同工具和应用程序都可以访问的 TOML 文件。这很好,因为只有一个事实来源,而且 TOML 非常易于阅读。缺点是必须为您的语言找到一个 TOML 解析器(imo 并不难),并确保当脚本/服务/任何期望的文件存在时。我已经走了这条路,而且还不错,您甚至可以将文件放在“云”中(NAS、共享数据存储、具有广泛读取权限的文件夹),如果您需要启动超过服务的一个实例。
环境变量。我最近喜欢这种方法,因为它总是你可以做的最少的配置,而且几乎任何语言都有访问环境变量的工具。此外,您可能不会在可公开访问的纯文本文件中保留敏感信息。
对于 python,你可以调用 os.environ[MY_CONFIG_NAME] 并且 presto,你有配置信息。
这两种方法都很常见,并且在几乎所有语言中都有大量支持。
就客户端、服务器分离而言。我倾向于让我的客户尽可能“愚蠢”,让我的服务器尽可能“聪明”。