¿Gestionar dependencias internas de un proyecto Git?

¿Gestionar dependencias internas de un proyecto Git?

Tengo una pregunta básica sobre la gestión de un proyecto Git con múltiples componentes. El proyecto al que me refiero tiene la siguiente estructura:

project-name
├── cli
├── api
├── webapp
├── docker-compose.yaml
├── README.md
├── LICENCE

Mi objetivo es tener una estructura que priorice la mantenibilidad y la reutilización del código. Por lo tanto, todas las funcionalidades principales están integradas en una interfaz de línea de comandos (cli) en Python. También estoy creando una API de descanso y el objetivo es que utilice la CLI en segundo plano para no reescribir el código.

Mi primera pregunta es:¿Es este un buen enfoque? Utilicé muchas CLI basadas en API (lo opuesto a mi enfoque), como para AWS. Y también utilicé API basadas en CLI, como ffmpeg. Así que no estoy seguro de si en mi caso tiene sentido seguir el camino que expliqué anteriormente.

Ahora para vincular la api y la cli, tengo 2 enfoques en mente y no sé cuál es el más apropiado.

  • Método A: llame a la CLI desde la API directamente utilizando una ruta relativa dentro del proyecto. ¿Pero esto significaría que el cli siempre debería enviarse con la API?
  • Método B: cree el cli por separado en un paquete de Python y publíquelo en un repositorio, luego utilícelo como requisito en la API. Esto me parece "más limpio", pero significa que no veré las mejoras que realice en la CLI de inmediato, ya que necesito compilar el paquete nuevamente y publicarlo.

Mi segunda pregunta es:¿Qué enfoque es la forma correcta de hacer referencia a la CLI en la API? (¿o hay otras formas?)

¡Gracias de antemano!

Respuesta1

No, aquí hay numerosos problemas:

  • La API no debe utilizar una CLI. La CLI debe utilizar una API.
  • Si bien puedes poner una cli/app/webapp en un repositorio, esto se considera un mal diseño: se llama"monorepo". Normalmente, querrás tres repositorios diferentes, donde la aplicación web y la CLI llaman a la API. Esto también es mejor porque un Dockerfile difícilmente tiene sentido: ¿está empaquetando un cli o una aplicación web? Esperaría que hubiera un Dockerfile tanto en la CLI como en la aplicación web.
  • La ventaja de utilizar micro-repos sobre un monorepo es, en gran medida, las herramientas. Las herramientas proporcionarán un soporte mucho mejor para estas cosas.
  • El uso de un microrepositorio obliga a que su CLI y su aplicación web tengan versiones separadas de la API. Esto siempre es deseable. Por ejemplo, puede desarrollar dos versiones de la aplicación web o de la CLI, utilizando simultáneamente dos versiones diferentes de la API. Al incorporar su API desde la CLI y la aplicación web, funcione como cualquier otra dependencia externa necesaria.

información relacionada