Эта история о моем собственном опыте, о разработчике, который занимается кодированием двенадцать лет. Поскольку это мой первый пост на 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.
Рабочий процесс
- Считывать изображения / видео из определенной папки, если изображения попадают в (2), если видео идут в (3).
- Проанализируйте изображения с помощью AWS API, затем перейдите (4)
- Проанализируйте видео с помощью API AWS, затем перейдем (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, чтобы обсудить, передать любые отзывы и предложения. Если вы хотите участвовать, дайте мне знать.