Плюсы и минусы для разных форматов конфигурации? - PullRequest
29 голосов
/ 21 июня 2010

Я видел людей, использующих * .cfg (Python Buildout), * .xml (Gnome), * .json (расширение Chrome), * .yaml (Google App Engine), * .ini и даже * .py дляфайлы конфигурации приложения (например, Django).

Мой вопрос: почему существует так много разных форматов файлов конфигурации?Я вижу преимущество подхода xml против json (гораздо менее многословный) или подхода Python (иногда у вас есть приложение Python, и вы не хотите использовать конкретный модуль для анализа файла конфигурации), но как насчет другого?Подходит?

Я знаю, что форматов даже больше, чем тех файлов конфигурации, которые я иллюстрировал.Каковы их преимущества по сравнению друг с другом?Исторические причины?Совместимость с различными системами?

Если бы вы запустили приложение для чтения каких-либо файлов конфигурации (с экосистемой плагинов), какой из них вы бы использовали?

Какие из них я привел в качестве примерасамые старые?Вы знаете, что это история?

Ответы [ 2 ]

18 голосов
/ 21 июня 2010

В основном это личные предпочтения, цели и доступные библиотеки.Лично я думаю, что xml слишком многословен для конфигурационных файлов, но он популярен и имеет отличные библиотеки.

.cfg, .ini - это устаревшие форматы, которые хорошо работают, и многие языки имеют включенную библиотеку, которая их читает.Я использовал его в Java, Python, C ++ без проблем.На самом деле он не работает как формат обмена данными, и если я передаю данные, я, вероятно, буду использовать один и тот же формат для конфигурации и обмена данными.

yaml, а json - между xml и cfg / ini.Вы можете определить много структур данных в обоих, или это может быть простое значение ключа как с cfg.Оба этих формата имеют отличные библиотеки на python, и я предполагаю, что и во многих других языках есть библиотеки.Я считаю, что json - это подмножество yaml.

Я никогда не использовал файл python в качестве конфигурации, но, похоже, он хорошо работает для django.Это позволяет вам иметь некоторый код в конфигурации, который может быть полезен.

В прошлый раз, когда я выбирал формат, я выбрал yaml.Это просто, но имеет некоторые приятные функции, а библиотека python была проста в установке и действительно хороша.Json был близким вторым, и поскольку библиотека yaml проанализировала json, я выбрал yaml.

6 голосов
/ 21 июня 2010

Обратите внимание, что это чистое мнение и предположение с моей стороны, но я подозреваю, что единственная главная причина множества форматов, вероятно, связана с отсутствием легкодоступной, вездесущей библиотеки для разбора файла конфигурации.Не имея этого, большинству программ приходится писать свои собственные парсеры, поэтому часто приходится балансировать между тем, насколько сложной должна быть структура конфигурации (иерархическая или плоская, чисто данные и встроенная логика, например операторы if и т. Д.), Сколько усилий разработчикибыли готовы потратить на написание анализатора файла конфигурации, и сколько боли это должно быть для конечного пользователя.Однако, вероятно, каждая причина, которую вы перечислили и могли подумать, скорее всего, послужила мотивом для одного или двух проектов при выборе их формата.

Для своих собственных проектов я склонен использовать .ini просто потому, что уже есть отличный парсервстроенный в Python, и он был "достаточно хорош" для большинства моих случаев использования.В нескольких случаях этого было недостаточно, я использовал файл конфигурации на основе XML, опять же, из-за относительной простоты реализации.

...