Эта история о моем собственном опыте, о разработчике, который занимается кодированием двенадцать лет. Поскольку это мой первый пост на Medium, почему бы мне не рассказать немного о себе.

Мой путь начинается с старых добрых времен dBase, когда монитор был еще черно-белым. Я помню, как мои друзья играли в прятки и Pokemon Blue / Red на Nintendo. Мои родители были добры ко мне, купив дорогой компьютер. Мне посчастливилось выучить язык программирования в молодом возрасте.

Затем я становлюсь серьезным и самоучка, C, C ++, Java, .NET, PHP, ObjectiveC, Javascript, Typescript, а теперь и Python. О боже, Python - чертовски хороший язык программирования, такая красота.

За эти годы и на разных языках я создал бесчисленное количество приложений и веб-сайтов, все они варьируются от малых до крупных, с разными целями и функциями. Однако есть одна важная общая часть - конфигурация.

Конфигурация

Неважно, какой язык программирования, насколько велико приложение и сколько функций вы создаете. В какой-то момент вам потребуется некоторая конфигурация для контроля и управления вашим приложением. Конфигурация может быть:

  • Где путь загрузки
  • Каков API-ключ и секрет услуги
  • Насколько велико разрешение изображения, принимаемое приложением

Выглядит прямолинейно, однако в моем проекте конфигурация может раздражать из-за:

  • Повторение: несколько раз определяется в одном или нескольких файлах.
  • Конфиденциально: закрытый ключ API, пароль.
  • Отключено: несколько файлов для размещения конфигурации.
  • Без выражения: большая часть конфигурации статична как значение.

Это побудило меня создать свой первый проект с открытым исходным кодом на Github. Я назвал это conff

Почему я должен использовать conff?

Фреймворк поможет обеспечить:

Возможность повторного использования
-
Импорт значений из другого файла
- Контрольные значения из другого объекта в файле

Безопасный
-
Шифрование / дешифрование конфиденциальных значений.

Гибкость
-
Создание логических выражений для получения значений
- Комбинирование с jinja2 на основе шаблона

Мощный
-
Добавление пользовательских функций в Python
- Связывание данных имени из Python

Позвольте мне показать пример моего недавнего приложения, которое я создал на Python с помощью conff. Приложение анализирует изображение / видео, что включает рабочий процесс с набором задач на AWS Rekognition.

Рабочий процесс

  1. Считывать изображения / видео из определенной папки, если изображения попадают в (2), если видео идут в (3).
  2. Проанализируйте изображения с помощью AWS API, затем перейдите (4)
  3. Проанализируйте видео с помощью API AWS, затем перейдем (4)
  4. Запишите результат обратно в файл JSON, готово

Примечания

  • R01: подпуть «/ data / project» повторяется между R01 и R05.
  • R02: api_cred повторно определяется с помощью R04
  • R03: секрет очевиден, если он хранится в GIT, это чистая катастрофа

В действии conff!

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

Примечания

  • F01: это безопасно, если необходимо изменить префикс «/ data / project», он будет автоматически изменен на F05.
  • F02: больше нет дублированной конфигурации с F04
  • F03: это безопасно для сохранения в GIT, если ключ шифрования надежно хранится где-то на сервере, например ~ / .secret.

Заключительные мысли

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

На данном этапе библиотека conff только на языке Python. Я планирую, что он будет существовать на других языках программирования, таких как PHP, Javascript или Java. Заходите на Gitter Channel, чтобы обсудить, передать любые отзывы и предложения. Если вы хотите участвовать, дайте мне знать.