Saltar a contenido

Crear proyectos

Guía detallada para crear distintos tipos de proyectos FastAPI con FastAPI-fastkit.

Creación básica de proyectos

1. Crear un proyecto en modo interactivo

La forma más básica de crear un proyecto de manera interactiva:

$ fastkit init
Enter the project name: my-awesome-api
Enter the author name: John Doe
Enter the author email: john@example.com
Enter the project description: Awesome FastAPI project

           Project Information
┌──────────────┬─────────────────────────┐
│ Project Name │ my-awesome-api          │
│ Author       │ John Doe                │
│ Author Email │ john@example.com        │
│ Description  │ Awesome FastAPI project │
└──────────────┴─────────────────────────┘

2. Selección del stack

Elige el stack de dependencias que quieres incluir en tu proyecto:

Stack MINIMAL (por defecto)

El proyecto FastAPI más básico:

  • fastapi - Framework FastAPI
  • uvicorn - Servidor ASGI
  • pydantic - Validación de datos
  • pydantic-settings - Gestión de configuración

Ideal para:

  • Aprender FastAPI
  • APIs simples
  • Prototipos
  • Microservicios

Stack STANDARD

Incluye soporte para base de datos y pruebas:

  • Todas las dependencias de MINIMAL
  • sqlalchemy - ORM para operaciones de base de datos
  • alembic - Migraciones de base de datos
  • pytest - Framework de pruebas

Ideal para:

  • La mayoría de aplicaciones web
  • APIs con almacenamiento en base de datos
  • Aplicaciones listas para producción
  • Proyectos en equipo

Stack FULL

Entorno de desarrollo completo:

  • Todas las dependencias de STANDARD
  • redis - Caché y almacenamiento de sesiones
  • celery - Procesamiento de tareas en segundo plano

Ideal para:

  • Aplicaciones grandes
  • Requisitos de alto rendimiento
  • Lógica de negocio compleja
  • Aplicaciones empresariales

Opciones avanzadas del proyecto

Configuración personalizada del proyecto

Puedes personalizar tu proyecto durante la creación:

$ fastkit init
Enter the project name: advanced-api
Enter the author name: Development Team
Enter the author email: dev@company.com
Enter the project description: Advanced FastAPI application with custom features

# Elige el stack STANDARD para soporte de base de datos
Select stack (minimal, standard, full): standard
Do you want to proceed with project creation? [y/N]: y

Explicación de la estructura del proyecto

Cuando creas un proyecto, FastAPI-fastkit genera esta estructura:

my-awesome-api/
├── .venv/                      # Entorno virtual
├── src/                        # Código fuente
│   ├── __init__.py
│   ├── main.py                # Punto de entrada de la app
│   ├── core/                  # Configuración central
│   │   ├── __init__.py
│   │   └── config.py         # Ajustes y configuración
│   ├── api/                   # Capa de API
│   │   ├── __init__.py
│   │   ├── api.py            # Router principal de la API
│   │   └── routes/           # Módulos individuales de rutas
│   │       ├── __init__.py
│   │       └── items.py      # Endpoints de ejemplo de items
│   ├── crud/                  # Operaciones de base de datos
│   │   ├── __init__.py
│   │   └── items.py          # Operaciones CRUD para items
│   ├── schemas/               # Modelos Pydantic
│   │   ├── __init__.py
│   │   └── items.py          # Esquemas de validación de datos
│   └── mocks/                 # Datos de prueba
│       ├── __init__.py
│       └── mock_items.json   # Datos de ejemplo para desarrollo
├── tests/                     # Suite de pruebas
│   ├── __init__.py
│   ├── conftest.py           # Configuración de pruebas
│   └── test_items.py         # Pruebas de ejemplo
├── scripts/                   # Scripts de utilidades
│   ├── test.sh               # Ejecutar pruebas
│   ├── coverage.sh           # Cobertura de pruebas
│   └── lint.sh               # Linting de código
├── requirements.txt           # Dependencias Python
├── setup.py                  # Configuración del paquete
└── README.md                 # Documentación del proyecto

3. Selección del gestor de paquetes

FastAPI-fastkit soporta varios gestores de paquetes Python. Elige el que mejor encaje con tu flujo de desarrollo:

Gestores disponibles

Available Package Managers:
                   Package Managers
┌────────┬────────────────────────────────────────────┐
│ PIP    │ Standard Python package manager            │
│ UV     │ Fast Python package manager                │
│ PDM    │ Modern Python dependency management        │
│ POETRY │ Python dependency management and packaging │
└────────┴────────────────────────────────────────────┘

Select package manager (pip, uv, pdm, poetry) [uv]: uv

Cada gestor tiene sus ventajas:

UV (Por defecto — recomendado)

Gestor de paquetes rápido basado en Rust

  • ⚡ Ultra rápido: 10-100x más rápido que pip
  • 🔧 Sin complicaciones: Compatible con los flujos habituales de pip
  • 📦 Moderno: Soporte completo de PEP 621
  • 🛠️ Fiable: Resolución determinista

Archivos generados:

  • pyproject.toml (formato PEP 621)
  • uv.lock (archivo de lock)

Uso tras la creación:

cd my-project
uv sync              # Instalar dependencias
uv add requests      # Añadir nueva dependencia
uv run pytest       # Ejecutar pruebas

PDM

Gestión moderna de dependencias Python

  • 🚀 Moderno: Soporte para PEP 582 y PEP 621
  • 🧠 Inteligente: Resolución avanzada de dependencias
  • 💼 Profesional: Workspaces y soporte multi-proyecto
  • 📊 Analíticas: Herramientas de análisis de dependencias

Archivos generados:

  • pyproject.toml (formato PEP 621)
  • pdm.lock (archivo de lock)

Uso tras la creación:

cd my-project
pdm install          # Instalar dependencias
pdm add requests     # Añadir nueva dependencia
pdm run pytest      # Ejecutar pruebas

Poetry

Gestión de dependencias y empaquetado maduros

  • ✅ Consolidado: Maduro y muy adoptado
  • 📦 Integrado: Soporte de build y publicación
  • 🔒 Reproducible: poetry.lock para versiones exactas
  • 🏗️ Completo: Ciclo de vida del proyecto completo

Archivos generados:

  • pyproject.toml (formato Poetry)
  • poetry.lock (archivo de lock)

Uso tras la creación:

cd my-project
poetry install       # Instalar dependencias
poetry add requests  # Añadir nueva dependencia
poetry run pytest   # Ejecutar pruebas

PIP

Gestor estándar de paquetes Python

  • 🏠 Incluido: Viene con Python
  • 🌍 Universal: Funciona en todas partes
  • 📚 Familiar: La mayoría de desarrolladores lo conoce
  • 🔧 Simple: Flujo de trabajo directo

Archivos generados:

  • requirements.txt

Uso tras la creación:

cd my-project
source .venv/bin/activate    # Linux/macOS
.venv\Scripts\activate       # Windows
pip install -r requirements.txt
pip install requests
pytest

Especificar el gestor de paquetes

Puedes especificar tu gestor preferido:

Selección interactiva (por defecto):

$ fastkit init
# ... pide la selección de gestor de paquetes

Opción de línea de comandos:

$ fastkit init --package-manager poetry
$ fastkit init --package-manager pdm
$ fastkit init --package-manager uv
$ fastkit init --package-manager pip

Entender cada directorio

Directorio src/

Contiene todo el código fuente de tu aplicación siguiendo el patrón src layout, buena práctica de empaquetado en Python.

Módulo core/

  • config.py: Ajustes de la app, variables de entorno y configuración
  • Centraliza toda la gestión de configuración
  • Soporta archivos .env para ajustes por entorno

Módulo api/

  • api.py: Router principal que incluye todos los sub-routers
  • routes/: Módulos individuales de rutas para distintos recursos
  • Separación clara de responsabilidades para distintos endpoints

Módulo crud/

  • Operaciones de base de datos y lógica de negocio
  • Operaciones Create, Read, Update, Delete
  • Capa de abstracción entre las rutas de la API y el almacenamiento

Módulo schemas/

  • Modelos Pydantic para validación de datos
  • Esquemas de petición / respuesta
  • Definiciones de tipos y modelos de datos

Directorio tests/

  • Suite completa de pruebas para tu aplicación
  • Incluye pruebas unitarias y de integración
  • Preconfigurado con pytest

Comparación de stacks

Característica MINIMAL STANDARD FULL
FastAPI y Uvicorn ✅ ✅ ✅
Validación de datos ✅ ✅ ✅
Soporte de base de datos ❌ ✅ ✅
Migraciones ❌ ✅ ✅
Framework de pruebas ❌ ✅ ✅
Caché (Redis) ❌ ❌ ✅
Tareas en segundo plano ❌ ❌ ✅
Ideal para Aprendizaje, APIs simples La mayoría de aplicaciones Empresarial, apps complejas

Ejemplos de creación de proyectos

Ejemplo 1: Proyecto de aprendizaje

$ fastkit init
Enter the project name: fastapi-learning
Enter the author name: Student
Enter the author email: student@example.com
Enter the project description: Learning FastAPI basics

Select stack (minimal, standard, full): minimal
Do you want to proceed with project creation? [y/N]: y

Ejemplo 2: API de e-commerce

$ fastkit init
Enter the project name: ecommerce-api
Enter the author name: E-commerce Team
Enter the author email: team@ecommerce.com
Enter the project description: E-commerce platform API

Select stack (minimal, standard, full): standard
Do you want to proceed with project creation? [y/N]: y

Ejemplo 3: Aplicación de alto rendimiento

$ fastkit init
Enter the project name: enterprise-api
Enter the author name: Enterprise Team
Enter the author email: enterprise@company.com
Enter the project description: High-performance enterprise API

Select stack (minimal, standard, full): full
Do you want to proceed with project creation? [y/N]: y

Después de crear el proyecto

1. Activar el entorno virtual

$ cd my-awesome-api
$ source .venv/bin/activate  # Linux/macOS
$ .venv\Scripts\activate     # Windows

2. Verificar la instalación

$ pip list
Package         Version
fastapi         0.104.1
uvicorn         0.24.0
pydantic        2.5.0
...

3. Empezar a desarrollar

$ fastkit runserver
INFO:     Uvicorn running on http://127.0.0.1:8000

Gestión de configuración

Variables de entorno

Tu proyecto soporta configuración por entorno mediante archivos .env:

Crea un archivo .env en la raíz del proyecto:

# .env
APP_NAME=My Awesome API
APP_VERSION=1.0.0
DEBUG=True
DATABASE_URL=sqlite:///./app.db
SECRET_KEY=your-secret-key-here

Configuración desde el código

El archivo generado src/core/config.py carga estas variables automáticamente:

from pydantic_settings import BaseSettings

class Settings(BaseSettings):
    APP_NAME: str = "FastAPI Application"
    APP_VERSION: str = "1.0.0"
    DEBUG: bool = False
    DATABASE_URL: str = "sqlite:///./app.db"
    SECRET_KEY: str = "dev-secret-key"

    class Config:
        env_file = ".env"

settings = Settings()

Opciones de personalización

Añadir dependencias personalizadas

Tras crear el proyecto, puedes añadir más dependencias:

$ pip install requests httpx python-jose
$ pip freeze > requirements.txt

Modificar la estructura del proyecto

Aunque la estructura generada sigue buenas prácticas, puedes modificarla:

  • Añade módulos nuevos en src/
  • Crea archivos de rutas adicionales en api/routes/
  • Amplía las operaciones CRUD en crud/
  • Añade más esquemas en schemas/

Buenas prácticas

1. Entorno virtual

Usa siempre entornos virtuales para aislar las dependencias del proyecto:

# Crear proyecto con entorno virtual
$ fastkit init  # Crea automáticamente .venv/

# Activarlo al trabajar
$ source .venv/bin/activate

2. Control de versiones

Inicializa el repositorio git tras crear el proyecto:

$ cd my-awesome-api
$ git init
$ git add .
$ git commit -m "Initial commit - FastAPI project setup"

3. Configuración por entorno

  • Usa archivos .env para desarrollo local
  • Usa variables de entorno para producción
  • No comitees nunca datos sensibles al control de versiones

4. Pruebas

Aprovecha el framework de pruebas incluido:

$ python -m pytest
$ bash scripts/test.sh

Próximos pasos

Tras crear tu proyecto:

  1. Añadir rutas: Aprende a añadir nuevos endpoints de API
  2. Referencia de la CLI: Domina todos los comandos disponibles
  3. Tutorial de tu primer proyecto: Construye una aplicación completa

Consejos para crear proyectos

  • Elige el stack que se ajusta a los requisitos de tu proyecto
  • Empieza con MINIMAL para aprender, usa STANDARD para la mayoría de proyectos
  • La estructura del proyecto está pensada para escalar y mantenerse
  • Todo el código generado sigue las buenas prácticas de FastAPI