—————————
| PHP SCHEMA |
—————————
Для конфигурирования через JSON или YAML есть уже JSON и YAML Schema соответственно. И каждый раз разработчики PHP выбирают эти форматы для конфигурирования своих инструментов.
Не так давно появилась идея создать аналогичную схему и валидатор для PHP! Почему бы и не попытаться?
Для чего?
Издавно PHP массивы были очень хороши для задания конфигурировании для “гибких” систем: модульная система с заранее нерегламентированным набором входных данных, потому что данные забираются лишь 1 раз, а дальше распределяются потребителям.
Конечно, валидацию таких входящих параметров можно сделать:
- Нужно определить потребителей
- Заставить потребителей отбираться свои данные из общей кучи
- Делать предупреждение в случае отсутствия или избытка данных
Но это дорого для рантайма и никто таким не занимается. Разве что Symfony компоненты, которые через билдеры создают требования для этих входящих данных: название параметра, уровень вложенности, значение по умолчанию, тип и диапазон значений.
Что это им дает?
- Можно пользователю сказать какие из параметров на определенном уровне ожидаются
- Какой тип значений подходит и нет
- Сделать Quick Fix?
- Дать быстрый фидбек до запуска валидатора, например, с помощью плагина для IDE: Значение 11 больше максимального значения 10; Разрешены “author”, “commenter”, “viewer”, но вы ввели “viewr”
Научить машинерию работать на разработчика, а не вместе с ним – это всегда хорошая идея.
Поэтому такие вещи можно делать с помощью некой схемы, тот же билдер от Symfony конфигурации, только как-то иначе.
А как?
Подобные проблемы решались уже и для других “конфигурационных” языков, на подобии JSON, YAML и их подмножеству – Schema.
С помощью Schema задается состав, порядок и обязательность всех значений в конфигурации, типы и диапазоны значений, ссылки на другие значения и различные комментарии: от deprecated и version contract до обычных комментов.
Гипотетически, можно будет перегонять конфиги из JSON в PHP одной командой, а JSON SCHEMA в PHP SCHEMA.
Все кто хочет поучаствовать в разработке PHP SCHEMA (JSON SCHEMA, YAML SCHEMA), можете присоединяться и накидывать мысли. Я думаю это будет не такой уж и большой проект, но поможет комьюнити сделать чтобы данные и инструменты работали в одном контракте.
Если есть опыт проектирования каких-либо еще конфигов, помимо изложенных мной в посте, то дополняйте.
——
Канал и некоторые начальные мысли по схеме: https://t.me/phpschema/2
Post #57
377