Изготовление «синдиката» (4 части серии)
Я сделал это для людей, которые пишет слова, которые они делятся с другими:
Dabrady/Syndicate
Простая реализация модели публикации контента POSSE
Он распространяет копии контента, который вы автоматически создаете различные сайты публикации.
Мне потребовалось неделю целесообразных вечеров и выходных преданного взлома, чтобы полировать его по своему вкусу; И еще неделя, чтобы написать об этом.
Вот как я начал.
После моего Первоначальные исследования и настройки Я хотел начать спецификацию фактический вещь, которую я намеревался построить. Я начал, преобразуя мою реализацию «Привет, мир!» Учебник действий докера в проект Python, который будет работать в докеренном контейнере.
Первая задача, которую я преодолел, нашел изображение докера, которое фактически запускает Python. Как оказывается, альпийский
Изображение, используемое в руководстве, не приходит с установленным python, поэтому мне нужно либо установить его, либо искать другой контейнер, который с ним пришел. Я решил сначала второй подход, и простой поиск «Python Docker Image» привел меня к … Python
Docker Image Отказ
Сначала я просто поменял мой альпийский
Изображение для Python: 3
изображение, но что значительно увеличило время сборки действия (на 2 или 3 раза 😬) Так что я был сразу скептически использовать его. К счастью, я решил прочитать за пределы «Как использовать это изображение» раздел документации, и обнаружил пару «легких» версий. Поскольку у меня еще нет никаких проектных зависимостей, я решил попробовать использовать Python: 3-ALPINE
Из-за его похвастания характеристики производительности, а затем забыть об этом, пока он больше не работал. Это сделало вещь, и время моей базовой сборки было всего около 6 секунд.
Теперь, когда у меня был действие GitHub, наращивающее контейнер, который мог бы запустить Python, мне нужно было выяснить, как использовать Dev.to API. Я обнаружил ранее. Но что более важно, мне нужно было выяснить, как это сделать в Python , в идеале, используя какую-то стандартную или каноническую библиотеку.
Запросы
Пакет был ответом, быстро найден, и его документация должна была стать третьим и окончательным священным текстом в развитии моего проекта.
Я начал знакомиться с Запросы
и API dev.to, преобразовав мой существующий код действия в простой прототип. Учитывая мою неопытую в основном все в этом проекте, я решил начать здание чего-то, что будет реагировать на то, чтобы вытащить фиксацию моему репозитории GitHub, выявив мои посты от Dev.to и вытеснив свои названия. Чтение от Dev было простейшим взаимодействием с API, который казался, что он также сделает для хорошего упражнения.
Как только я получил эту работу, я думал, нужен ли мне эту функциональность в Синдикат
Отказ В этот момент не было понятно, потому что я на самом деле не сделал никаких дизайнерских работ на проект еще.
Я решил провести время созревать этот первый кусочек логики в пример для себя, чтобы следовать позже, в отношении использования API DEV и Запросы
Пакет правильно. Я бы включил такие вещи, как аутентификация запроса, входная проверка, ошибка и неудачный запрос, тестирование, тестирование и регистрацию.
Это решение оказалось вполне ценным. Это дало мне небольшое, но хорошо развивающееся упражнение, в котором я выяснил, как моя общая логика приложений может течь, и изучила такие вещи, как напечатать в журнал рабочего процесса GitHub; Как прочитать информацию из среды рабочего процесса GitHub; И как использовать Pтойцы для записи спецификаций для моего кода.
К концу этого упражнения у меня было:
- Определение рабочего процесса GitHub которые использовали мои действия и предоставили его со списком платформ для publys, наряду с ключами API, необходимыми для использования их API
- Выходная точка для контейнера Docker который вызывал мой «главный» приложение Python с любыми аргументами, указанными рабочим процессом GitHub
- Маленький, но функциональный модуль Python называется «синдикат», который определен Одна функция,
в другом месте
, ответственный за базовую проверку ввода, делегацию в соответствующий код синдикирования и Окончательная отчетность - Функция, которая привлекла и вернула мои опубликованные сообщения от dev.to с использованием ключа API, предоставленный рабочим процессом GitHub
- начало Утилита библиотека С функциями, которые обрабатывали печать в журнал рабочего процесса GitHub на различных уровнях журнала
- Небольшой тестовый люкс Для логики моей DEV ‘Fetch’
- Полностью полированный и протестированный пример того, как взаимодействовать с Dev.to API через
Запросы
упаковка
И давайте не пропустить вид на опыт, полученный с помощью самого Python!
Я был доволен своим прототипом, и я узнал много полезных вещей. На данный момент я приостановил развитие, чтобы принять запас, где я был и где мне нужно было идти.
Я провел вечер, работающий над набором первоначальных требований и технического дизайна высокого уровня для фактической вещи, которую я хотел построить, и это то, что я придумал:
Первоначальные требования
- Мой MVP (и, возможно, первый выпуск) будет поддерживать только dev.to
- Нужно было легко добавить поддержку для публикации на новые платформы
- Учитывая файл markdown, нужно иметь возможность создать черновик на dev.to с его содержанием
- Учитывая (предположительно измененное) файл markdown, ранее синхронизированные для dev.to, ему нужно было уметь заменить синдицированную копию с новой версией
- Учитывая коммит, который вызвал рабочий процесс, используя
Синдикат
Действие, необходимо иметь возможность идентифицировать и извлекать содержимое добавленных/модифицированных файлов для синдиката от этого фиксации - Необходимо иметь возможность идентифицировать файлы, которые были синдицированы для данного силоса ранее, чтобы решить, создать ли проект или толкать обновление
Технический дизайн высокого уровня
Синдикат
будет разработан в качестве действия GitHub, который будет включен в рабочий процесс GitHub для управления синдикацией содержания- Входные данные:
- Список платформ «Silo» для синдиката к
- Любые секреты, необходимые для использования API, связанные с данными силосами
- Выходы:
- Краткое изложение файлов, добавленных/измененных на каждой платформе SILO
- Механизмы взаимодействия с определенным силосом должны быть инкапсулированы в своих собственных файлах «адаптера» с одной точкой входа;
Syndicate.elsewhere
Функция будет нести ответственность за привлечение соответствующих адаптеров и агрегирующих выходов - Синдицированные файлы будут «помечены» с уникальными указанными идентификаторами (предположительно) самими бункерами в разделе «Проект» API; Эта метка позволит действию распознавать файлы в репо, который уже существует на данном силосе
Видя, что он выложен на бумаге (да, что еще существует) было взволновано! Я потрошен прототипом, который я создал, сохраняя только основную структуру и проводку вместе с некоторыми из более полезных фрагментов кода в качестве комментариев и установить на работу.
Изготовление «синдиката» (4 части серии)
Оригинал: “https://dev.to/daniel13rady/syndicate-prototype-requirements-and-design-455k”