Saltar a contenido

Usar plantillas

FastAPI-fastkit ofrece plantillas de proyecto ya preparadas para que puedas empezar rápido con distintas pilas tecnológicas.

Plantillas disponibles

Consulta las plantillas disponibles con el comando list-templates:

$ fastkit list-templates
                      Available Templates
┌─────────────────────────┬───────────────────────────────────┐
│ fastapi-custom-response │ Async Item Management API with    │
│                         │ Custom Response System            │
│ fastapi-dockerized      │ Dockerized FastAPI Item           │
│                         │ Management API                    │
│ fastapi-empty           │ No description                    │
│ fastapi-async-crud      │ Async Item Management API Server  │
│ fastapi-psql-orm        │ Dockerized FastAPI Item           │
│                         │ Management API with PostgreSQL    │
│ fastapi-default         │ Simple FastAPI Project            │
└─────────────────────────┴───────────────────────────────────┘

Descripción de las plantillas

1. fastapi-default

Proyecto FastAPI simple

  • Configuración básica de FastAPI con lo esencial
  • Gestión de items con datos mock
  • Perfecto para aprender y APIs simples
  • Incluye operaciones CRUD básicas

Ideal para:

  • Principiantes en FastAPI
  • APIs web simples
  • Aprendizaje y prototipado

2. fastapi-async-crud

Servidor API de gestión de items async

  • Aplicación FastAPI totalmente asíncrona
  • Operaciones CRUD avanzadas con async/await
  • Mejor rendimiento para operaciones de I/O
  • Almacenamiento de datos mock con patrones async

Ideal para:

  • Aplicaciones de alto rendimiento
  • Operaciones intensivas de I/O
  • Desarrollo Python async moderno

3. fastapi-custom-response

API de gestión de items async con sistema de respuesta personalizada

  • Modelos y formato de respuesta personalizados
  • Manejo avanzado de errores
  • Soporte de paginación
  • Códigos de estado HTTP y respuestas personalizadas

Ideal para:

  • APIs que requieren formatos de respuesta específicos
  • Necesidades avanzadas de manejo de errores
  • Lógica de negocio personalizada en las respuestas

4. fastapi-dockerized

API de gestión de items FastAPI dockerizada

  • Contenedorización Docker completa
  • Configuración de despliegue lista para producción
  • Builds Docker multi-stage
  • Configuración basada en entorno

Ideal para:

  • Despliegues a producción
  • Entornos contenedorizados
  • DevOps y pipelines de CI/CD

5. fastapi-psql-orm

API de gestión de items FastAPI dockerizada con PostgreSQL

  • Integración con base de datos PostgreSQL
  • ORM SQLAlchemy con migraciones Alembic
  • Docker Compose para desarrollo local
  • Operaciones CRUD completas sobre la base de datos

Ideal para:

  • Aplicaciones basadas en base de datos
  • Almacenamiento de datos a nivel producción
  • Relaciones de datos complejas

6. fastapi-empty

Proyecto FastAPI mínimo

  • Configuración mínima de FastAPI
  • Sin funciones añadidas de antemano
  • Lienzo en blanco para desarrollo personalizado

Ideal para:

  • Empezar desde cero
  • Dependencias mínimas
  • Requisitos de arquitectura personalizada

Crear un proyecto desde una plantilla

Usa el comando startdemo para crear un proyecto a partir de una plantilla:

$ fastkit startdemo
Enter the project name: my-blog-api
Enter the author name: John Doe
Enter the author email: john@example.com
Enter the project description: Blog API with PostgreSQL

Available Templates:
           fastapi-default
┌─────────────┬──────────────────────┐
│ Description │ Simple FastAPI       │
│             │ Project              │
│ Stack       │ FastAPI, Uvicorn     │
│ Database    │ Mock Data            │
│ Features    │ Basic CRUD           │
└─────────────┴──────────────────────┘

           fastapi-psql-orm
┌─────────────┬──────────────────────┐
│ Description │ Dockerized FastAPI   │
│             │ Item Management API  │
│             │ with PostgreSQL      │
│ Stack       │ FastAPI, PostgreSQL, │
│             │ SQLAlchemy, Docker   │
│ Database    │ PostgreSQL           │
│ Features    │ Full ORM, Migrations │
└─────────────┴──────────────────────┘

Select template (fastapi-default, fastapi-async-crud, fastapi-custom-response, fastapi-dockerized, fastapi-psql-orm, fastapi-empty): fastapi-psql-orm

           Project Information
┌──────────────┬─────────────────────┐
│ Project Name │ my-blog-api         │
│ Author       │ John Doe            │
│ Author Email │ john@example.com    │
│ Description  │ Blog API with       │
│              │ PostgreSQL          │
└──────────────┴─────────────────────┘

       Template Dependencies
┌──────────────┬───────────────────┐
│ Dependency 1 │ fastapi           │
│ Dependency 2 │ uvicorn           │
│ Dependency 3 │ sqlalchemy        │
│ Dependency 4 │ alembic           │
│ Dependency 5 │ psycopg2-binary   │
│ Dependency 6 │ python-dotenv     │
│ Dependency 7 │ pytest            │
└──────────────┴───────────────────┘

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
Do you want to proceed with project creation? [y/N]: y

✨ FastAPI project 'my-blog-api' from 'fastapi-psql-orm' has been created successfully!

Comparación de funcionalidades de las plantillas

Funcionalidad Default Async CRUD Custom Response Dockerized PostgreSQL ORM Empty
FastAPI básico ✅ ✅ ✅ ✅ ✅ ✅
Datos mock ✅ ✅ ✅ ✅ ❌ ❌
Soporte async Básico ✅ ✅ ✅ ✅ ❌
Respuestas personalizadas ❌ ❌ ✅ ❌ ❌ ❌
Docker ❌ ❌ ❌ ✅ ✅ ❌
Base de datos Mock Mock Mock Mock PostgreSQL Ninguna
ORM ❌ ❌ ❌ ❌ SQLAlchemy ❌
Migraciones ❌ ❌ ❌ ❌ Alembic ❌
Pruebas ✅ ✅ ✅ ✅ ✅ ❌
Ideal para Aprendizaje Rendimiento APIs personalizadas Producción Apps con BD Personalizado

Configuración específica por plantilla

Usar fastapi-psql-orm

Esta plantilla incluye una configuración completa de PostgreSQL. Tras crearla:

  1. Arrancar PostgreSQL con Docker:
$ cd my-blog-api
$ docker-compose up -d postgres
Starting my-blog-api_postgres_1 ... done
  1. Ejecutar las migraciones:
$ source .venv/bin/activate
$ alembic upgrade head
INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade -> bedcdc35b64a, first alembic
  1. Arrancar el servidor de la API:
$ fastkit runserver
INFO:     Uvicorn running on http://127.0.0.1:8000

Usar fastapi-dockerized

Esta plantilla ofrece soporte completo de Docker:

  1. Construir la imagen de Docker:
$ cd my-dockerized-api
$ docker build -t my-dockerized-api .
Successfully built abc123def456
Successfully tagged my-dockerized-api:latest
  1. Ejecutar el contenedor:
$ docker run -p 8000:8000 my-dockerized-api
INFO:     Uvicorn running on http://0.0.0.0:8000

Usar fastapi-custom-response

Esta plantilla incluye un manejo avanzado de respuestas:

  1. Modelos de respuesta personalizados:
from src.helper.pagination import PaginatedResponse
from src.schemas.base import StandardResponse

@router.get("/", response_model=PaginatedResponse[Item])
def read_items(skip: int = 0, limit: int = 10):
    items = items_crud.get_multi(skip=skip, limit=limit)
    total = items_crud.count()

    return PaginatedResponse(
        data=items,
        total=total,
        page=skip // limit + 1,
        pages=(total + limit - 1) // limit
    )

@router.post("/", response_model=StandardResponse[Item])
def create_item(item: ItemCreate):
    new_item = items_crud.create(item)
    return StandardResponse(
        data=new_item,
        message="Item created successfully",
        status_code=201
    )
  1. Manejo mejorado de errores:
from src.helper.exceptions import ItemNotFoundError, ValidationError

@router.get("/{item_id}", response_model=StandardResponse[Item])
def read_item(item_id: int):
    try:
        item = items_crud.get(item_id)
        return StandardResponse(data=item)
    except ItemNotFoundError:
        raise HTTPException(
            status_code=404,
            detail=f"Item with id {item_id} not found"
        )

Estructura de proyecto de las plantillas

Cada plantilla sigue una estructura consistente pero personalizada:

Estructura de fastapi-default

my-project/
├── src/
│   ├── main.py
│   ├── core/config.py
│   ├── api/
│   │   ├── api.py
│   │   └── routes/items.py
│   ├── crud/items.py
│   ├── schemas/items.py
│   └── mocks/mock_items.json
├── tests/
├── scripts/
└── requirements.txt

Estructura de fastapi-psql-orm

my-project/
├── src/
│   ├── main.py
│   ├── core/
│   │   ├── config.py
│   │   └── db.py
│   ├── api/
│   │   ├── api.py
│   │   ├── deps.py
│   │   └── routes/items.py
│   ├── crud/items.py
│   ├── schemas/items.py
│   ├── alembic/
│   │   ├── env.py
│   │   └── versions/
│   └── utils/
├── tests/
├── scripts/
├── docker-compose.yml
├── Dockerfile
├── alembic.ini
└── requirements.txt

Personalizar las plantillas

Tras crear un proyecto desde una plantilla, puedes personalizarlo:

1. Añadir rutas nuevas

$ fastkit addroute posts my-blog-api
$ fastkit addroute users my-blog-api
$ fastkit addroute comments my-blog-api

2. Modificar la configuración

Edita src/core/config.py según tus necesidades:

from pydantic_settings import BaseSettings

class Settings(BaseSettings):
    PROJECT_NAME: str = "My Blog API"
    VERSION: str = "1.0.0"
    API_V1_STR: str = "/api/v1"

    # Configuración de base de datos (para plantillas PostgreSQL)
    DATABASE_URL: str = "postgresql://user:password@localhost/dbname"

    # Configuración de seguridad
    SECRET_KEY: str = "your-secret-key-here"
    ACCESS_TOKEN_EXPIRE_MINUTES: int = 30

    class Config:
        env_file = ".env"

settings = Settings()

3. Añadir variables de entorno

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

# .env
PROJECT_NAME=My Blog API
VERSION=1.0.0
DEBUG=True

# Base de datos (para plantillas PostgreSQL)
DATABASE_URL=postgresql://user:password@localhost:5432/myblogdb
POSTGRES_USER=user
POSTGRES_PASSWORD=password
POSTGRES_DB=myblogdb

# Seguridad
SECRET_KEY=your-super-secret-key-here
ACCESS_TOKEN_EXPIRE_MINUTES=30

Probar las plantillas

Cada plantilla viene con pruebas preconfiguradas:

$ cd my-blog-api
$ source .venv/bin/activate
$ python -m pytest

======================== test session starts ========================
tests/test_items.py::test_create_item PASSED
tests/test_items.py::test_read_items PASSED
tests/test_items.py::test_read_item PASSED
tests/test_items.py::test_update_item PASSED
tests/test_items.py::test_delete_item PASSED
======================== 5 passed in 0.23s ========================

Flujo de trabajo con plantillas

1. Elegir la plantilla adecuada

  • Aprendizaje / APIs simples: fastapi-default
  • Alto rendimiento: fastapi-async-crud
  • Formatos de respuesta personalizados: fastapi-custom-response
  • Despliegue a producción: fastapi-dockerized
  • Aplicaciones con base de datos: fastapi-psql-orm
  • Arquitectura personalizada: fastapi-empty

2. Crear y preparar

$ fastkit startdemo
# Sigue los prompts
$ cd your-project
$ source .venv/bin/activate

3. Desarrollo

# Arrancar el servidor de desarrollo
$ fastkit runserver

# Ejecutar pruebas
$ python -m pytest

# Añadir nuevas funcionalidades
$ fastkit addroute new-resource your-project

4. Despliegue

Para plantillas de producción (fastapi-dockerized, fastapi-psql-orm):

# Build para producción
$ docker build -t your-app .

# Desplegar con Docker Compose
$ docker-compose up -d

Buenas prácticas

1. Elegir plantillas con cabeza

  • Empieza con plantillas más simples para aprender
  • Usa plantillas con base de datos para apps basadas en datos
  • Usa plantillas con Docker para despliegues a producción

2. Gestión del entorno

  • Usa siempre archivos .env para la configuración
  • Nunca comitees datos sensibles al control de versiones
  • Usa entornos distintos para desarrollo / producción

3. Estrategia de personalización

  • Añade rutas nuevas con fastkit addroute
  • Modifica el código existente para adaptarlo a tu lógica de negocio
  • Mantén la estructura del proyecto ordenada

4. Pruebas

  • Ejecuta las pruebas regularmente durante el desarrollo
  • Añade pruebas para cada funcionalidad nueva
  • Usa la estructura de pruebas incluida como guía

Solución de problemas

Problemas de conexión a base de datos (plantillas PostgreSQL)

Si no puedes conectarte a PostgreSQL:

  1. Comprueba que Docker está corriendo:
$ docker ps
  1. Verifica el contenedor PostgreSQL:
$ docker-compose logs postgres
  1. Revisa las variables de entorno:
DATABASE_URL=postgresql://user:password@localhost:5432/dbname

Fallos al construir la imagen Docker

Si falla el build de Docker:

  1. Comprueba la sintaxis del Dockerfile
  2. Verifica que todos los archivos están presentes
  3. Comprueba que el daemon de Docker está corriendo

Dependencias faltantes

Si recibes errores de import:

  1. Activa el entorno virtual:

    $ source .venv/bin/activate
    

  2. Instala las dependencias:

    $ pip install -r requirements.txt
    

Próximos pasos

Ahora que entiendes las plantillas:

  1. Tu primer proyecto: Construye una aplicación completa
  2. Añadir rutas: Amplía tu proyecto basado en plantilla
  3. Referencia de la CLI: Domina todos los comandos disponibles

Consejos sobre plantillas

  • Las plantillas son excelentes puntos de partida, no soluciones finales
  • Personaliza las plantillas según tus requisitos específicos
  • Lee el código de las plantillas para aprender buenas prácticas de FastAPI
  • Usa el control de versiones para rastrear tus personalizaciones