April 14

config formats

Возможно позже будет статья как работает парсинг конфигов со всеми построеняими деревьев и т.п. Хотя фактически это никому не нужно.

Цель конфига - получить человекочитаемые, структурированные данные.

Они все нормальные, пиши на чём нравится. Тем более существует множество диалектов.

Я выбираю классический toml v1.0.0. Простой синтаксис, есть все базовые типы данных, мало лишних сущностей, красивый сайт с документацией.

yaml

Хитровыебанный формат, но много где используется. Докер, кубер. ансибле. Всю документацию читать я сейчас не буду, есть куча фичей.

Вложенность - 2 пробела, никаких табов.

списки: # или инлайново [1,2,3]

- 1

- 2

- 3

Словари: # или инлайново {a: 1, b:2, c:3}

a: 1

b: 2

c : 3

Есть даже ссылки со значениями.

default_user: &user

name: John

age: 30

admin: *user # теперь мы можем использовать это

ini

Простой, маленький человекочитаемый формат конфигов. Не имеет чёткой спецификации, но базовые функции поддерживаются везде.

Есть секции

[base]

# это ключ/значение, а вот комменты уже поддерживаются не всеми парсерами и не на всех платформах)

key = val

[base.something]

tip = "вложенные секции есть во многих парсерах, но тоже далеко не везде"

toml

Расширенный ini с нормальной спецификацией. Поддерживает все базовые типы данных. Массивы, int, float, boolean, списки, словари, время. Синтаксис простой

Like keys, you cannot define a table more than once.

[base] # все те же секции с нормальными коментариямр

arr = [1,2,"a"]

dick = {'a', 'b', 31}

ldt1 = 1979-05-27T07:32:00

some = true/non/inf/"""large

text"""

Можно создавать объекты через

bad.apple = 123

bad.boy = 666

# будет как "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>