
У меня есть базовый вопрос об управлении проектом Git с несколькими компонентами. Проект, о котором я говорю, имеет следующую структуру:
project-name
├── cli
├── api
├── webapp
├── docker-compose.yaml
├── README.md
├── LICENCE
Моя цель — иметь структуру, которая ставит во главу угла удобство обслуживания и повторное использование кода. Поэтому все основные функции встроены в интерфейс командной строки (cli) в Python. Я также создаю REST API, и моя цель — заставить его использовать cli в фоновом режиме, чтобы не переписывать код.
Мой первый вопрос:Хороший ли это подход? Я использовал много cli на основе API (противоположный моему подходу), например, для AWS. И я также использовал API на основе CLI, например, ffmpeg. Поэтому я не уверен, имеет ли в моем случае смысл идти по пути, который я описал выше.
Теперь, чтобы связать API и CLI, у меня на примете два подхода, и я не знаю, какой из них наиболее подходящий.
- Подход A: Вызов cli из api напрямую с использованием относительного пути внутри проекта. Но это будет означать, что cli всегда должен поставляться с api?
- Подход B: собрать cli отдельно в пакет python и опубликовать его в репозитории, а затем использовать его как требование в API. Мне это кажется «чище», но это означает, что я не увижу улучшения, которые я делаю в CLI, сразу, поскольку мне нужно будет снова собрать пакет и опубликовать его.
Мой второй вопрос:Какой подход является правильным способом ссылки на cli в API? (или есть другие способы?)
Заранее спасибо!
решение1
Нет, здесь есть множество проблем:
- API не должен использовать CLI. CLI должен использовать API.
- Хотя вы можете поместить cli/app/webapp в один репозиторий, это считается плохим решением: это называется"монорепо". Обычно вам нужны три разных репозитория, где веб-приложение и CLI оба вызывают API. Это также лучше, потому что один Dockerfile вряд ли имеет смысл — вы упаковываете cli или веб-приложение? Я бы ожидал, что Dockerfile будет и в cli, и в веб-приложении.
- Преимущество использования микро-репозиториев перед монорепозиторием во многом заключается в инструментах. Инструменты обеспечат гораздо лучшую поддержку для этих вещей.
- Использование микрорепозитория заставляет ваши cli и webapp версионироваться отдельно от API. Это всегда желательно. Например, вы можете разработать две версии либо веб-приложения, либо cli, одновременно используя две разные версии API. Извлечение вашего API из cli и webapp работает так же, как и любая другая необходимая внешняя зависимость.