FastAPI Boilerplate

En el mundo del desarrollo de software, contar con una plantilla actualizada y bien definida es clave para comenzar con agilidad y eficiencia cualquier proyecto. Y esto lo que voy a necesitar en las proximas semanas.

Esta plantilla de FastAPI está diseñada precisamente para eso: proporcionar un punto de partida rápido y optimizado, utilizando herramientas modernas que facilitan tanto el desarrollo como el despliegue de aplicaciones._

La plantilla esta disponible en Github.

Características de la plantilla

Este proyecto utilizad la version de Python 3.12, una de las versiones más recientes y robustas del lenguaje. Además, incorpora una Github Action que se ejecuta automáticamente en cada push realizado a la rama main, donde se ejecutan los tests y que verifica que el código tiene el estilo y los tipos adecuados.

Esto asegura que el código esté siempre validado mediante tests automáticos, lo que facilita mantener una base de código siempre funcional.

También se incluye un Dockerfile listo para usar en producción, lo que permite desplegar la aplicación de manera rápida y sencilla en cualquier entorno compatible con Docker como puede ser Kubernetes.

Requisitos Previos

El único requisito esencial para poner en marcha este proyecto es tener instalado Poetry, un gestor de dependencias y empaquetado para proyectos en Python. Poetry simplifica enormemente la instalación de paquetes y la gestión de entornos virtuales, garantizando que el proyecto funcione de manera consistente en cualquier máquina.

Estructura de Carpetas

Para mantener el código bien organizado, el proyecto sigue una estructura clara y modular basada en una Arquitectura Hexagonal.

Sus principales carpetas son:

  • tests: Contiene todos los archivos de tests.
    • unit: Aquí se encuentran las tests unitarias, que siguen el principio F.I.R.S.T, un enfoque que fomenta el desarrollo ágil y bien estructurado.
    • integration: Contiene las tests de integración, que validan la integración de nuestra app con los servicios externos.
    • acceptance: Contiene las tests de aceptación, que validan el comportamiento de la aplicación desde el punto de vista del usuario final.
  • src: El código de producción de la aplicación.
    • delivery: Aquí se gestiona toda la lógica relacionada con la API (el principal mecanismo de delivery de la app).
    • domain: Contiene las clases principales del dominio de la aplicación, es decir, las entidades y reglas de negocio.
    • infrastructure: Aquí se encuentran las clases que permiten la interacción con servicios externos, como bases de datos o APIs de terceros.
    • use_cases: En esta carpeta se encapsula la lógica de negocio, los casos de uso que hacen funcionar la aplicación.
    • common: Contiene la lógica compartida entre los diferentes módulos del proyecto.
  • scripts: Incluye los archivos relacionados con los hooks de git, que permiten automatizar ciertas acciones al trabajar en el repositorio.

Comandos de Makefile

El proyecto está diseñado para ser fácil de gestionar a través de Makefiles, un sistema que permite automatizar tareas comunes sin necesidad de ejecutar comandos largos.

Aquí algunos de los comandos más útiles:

  • add-package package=XXX: Instala un paquete específico en la aplicación, por ejemplo, make install package=requests.
  • build: Construye la imagen de Docker de la aplicación.
  • check-typing: Ejecuta un análisis estático del código para detectar problemas relacionados con los tipos.
  • check-format: Verifica que el formato del código siga las convenciones establecidas.
  • coverage : Genera un reporte de cobertura.
  • dev: Ejecuta la aplicación localmente en modo desarrollo.
  • format: Formatea el código automáticamente según las reglas definidas.
  • install: Instala todas las dependencias del proyecto.
  • local-setup: Configura el entorno local, incluyendo la instalación de hooks de git.
  • run: Ejecuta la aplicación localmente en modo producción.
  • test: Ejecuta todos los tests del proyecto para asegurarse de que el código funcione como se espera.
  • update: Actualiza los paquetes y dependencias a sus últimas versiones.
  • watch: Ejecuta los tests en modo watch, es decir re-ejecutándose los tests cada vez que se detecta un cambio en el código.

Es importante tener en cuenta que, antes de comenzar a escribir código, se debe ejecutar el comando make local-setup, que configura todo el entorno necesario para el desarrollo local.

Librerías de tests

  • pytest: Es el framework principal de tests utilizado en el proyecto, permitiendo escribir tests sencillas y poderosas.
  • pytest-xdist: Un complemento para pytest que permite ejecutar las tests en paralelo, acelerando el proceso.
  • expects: Una librería de aserciones que sigue el estilo TDD/BDD, haciendo que las tests sean más expresivas y legibles.
  • doublex: Un framework de dobles de prueba que facilita la creación de mocks, stubs y spies para los tests.

Librerías de calidad de código

Para asegurar la calidad del código, se utilizan las siguientes herramientas:

  • mypy: Un verificador de tipos estático que ayuda a identificar errores relacionados con los tipos de datos antes de que ocurran en tiempo de ejecución.
  • black: Un formateador automático que asegura que todo el código siga un estilo coherente y limpio.

Esta plantilla es una excelente opción para cualquier desarrollador que busque iniciar un proyecto con FastAPI de manera ágil y con las mejores prácticas ya configuradas. Con un entorno preconfigurado para tests, calidad de código y despliegue, este repositorio ofrece una base sólida sobre la cual construir cualquier tipo de aplicación.