config formats
Возможно позже будет статья как работает парсинг конфигов со всеми построеняими деревьев и т.п. Хотя фактически это никому не нужно.
Цель конфига - получить человекочитаемые, структурированные данные.
Они все нормальные, пиши на чём нравится. Тем более существует множество диалектов.
Я выбираю классический toml v1.0.0. Простой синтаксис, есть все базовые типы данных, мало лишних сущностей, красивый сайт с документацией.
yaml
Хитровыебанный формат, но много где используется. Докер, кубер. ансибле. Всю документацию читать я сейчас не буду, есть куча фичей.
Вложенность - 2 пробела, никаких табов.
списки: # или инлайново [1,2,3]
Словари: # или инлайново {a: 1, b:2, c:3}
Есть даже ссылки со значениями.
admin: *user # теперь мы можем использовать это
ini
Простой, маленький человекочитаемый формат конфигов. Не имеет чёткой спецификации, но базовые функции поддерживаются везде.
# это ключ/значение, а вот комменты уже поддерживаются не всеми парсерами и не на всех платформах)
tip = "вложенные секции есть во многих парсерах, но тоже далеко не везде"
toml
Расширенный ini с нормальной спецификацией. Поддерживает все базовые типы данных. Массивы, int, float, boolean, списки, словари, время. Синтаксис простой
Like keys, you cannot define a table more than once.
[base] # все те же секции с нормальными коментариямр
# будет как "bad": {"apple": 123, "boy": 666 },
bad = { "apple" = 132, boy = 666 } # можно инлайнить
Таким образом можно создавать несколько экземпляров [[массива таблиц]]. Может дублироваться сколько угодно раз, будет добавляться новые элементы массива.
json
Пошло от жопаскрипта. Все POST запросы передаются в этом формате.
Проще всего парсится, поэтому он используется для передачи данных.
Объект ограничивается фигурными скобками.
{ "name": "John", "age": 30, "is_student": false, "hobbies": ["reading", "hiking", "coding"], "address": { "city": "New York", "street": "123 Main St" } }
Можно в принципе и конфиги на нём делать, как vscode какой-нибудь делает, но он мене читаемый и вайбовый.
xml
Используется для SOAP запросов, я не ебу чё это.
Нет нормальных структур данных, но ему это вроде и не надо. Я почему-то видел его в freedesktop конфигах. Хуй их знает, вероятно там нужны эти веб приколюхи.
<configuration> <database> <server>localhost</server> <port>5432</port> <username>admin</username> <password>123456</password> </database> <logging> <level>DEBUG</level> <file>/var/log/application.log</file> </logging> </configuration>