Este proyecto es una plantilla base para aplicaciones construidas con FastAPI, diseñada para proporcionar una estructura clara y modular que facilita la escalabilidad y el mantenimiento.
- FastAPI: Framework rápido y eficiente para crear APIs.
- Modularidad: Separación clara de responsabilidades con carpetas para API, servicios, repositorios, modelos y esquemas.
- Autenticación: Manejo de tokens JWT para autenticación segura.
- Base de datos: Integración con SQLAlchemy para ORM.
- Migraciones: Uso de Alembic para gestionar migraciones de la base de datos.
- Paginación: Soporte para paginación en los endpoints.
- Pruebas: Configuración inicial para pruebas con Pytest.
- Crear, leer, actualizar y eliminar usuarios.
- Validación de datos con Pydantic.
- Seguridad con contraseñas encriptadas.
- Inicio de sesión con OAuth2 y JWT.
- Generación y validación de tokens.
- Protección de rutas mediante dependencias.
- Implementación de paginación en endpoints de tipo lista.
- Métodos opcionales para
limit
yoffset
.
- Excepciones personalizadas para errores comunes (e.g., usuario no encontrado, conflictos).
- Respuestas de error consistentes.
- Conexión a base de datos relacional mediante SQLAlchemy.
- Modelos definidos para usuarios y otras entidades.
- Configuración inicial para pruebas con Pytest.
- Pruebas básicas para usuarios y autenticación.
- 85% de coverage
fastapi-boilerplate/
├── app/
│ ├── api/ # Routers y endpoints
│ ├── core/ # Configuración y excepciones
│ ├── db/ # Configuración de la base de datos
│ ├── models/ # Modelos SQLAlchemy
│ ├── repositories/ # Lógica de acceso a datos
│ ├── schemas/ # Validación y serialización con Pydantic
│ ├── services/ # Lógica de negocio
│ └── utils/ # Utilidades auxiliares
├── test/ # Pruebas
├── main.py # Punto de entrada
├── requirements.txt # Dependencias
├── Procfile # Despliegue en Railway
└── .gitignore # Archivos ignorados por Git
- Python 3.8 o superior
- PostgreSQL (u otra base de datos compatible con SQLAlchemy)
-
Clona el repositorio:
git clone https://github.com/FabiCerchi/fastapi-boilerplate cd fastapi-boilerplate
-
Inicializa tu entorno virtual e instala los requerimientos
python -m venv venv source venv/bin/activate # En Windows: venv\Scripts\activate pip install -r requirements.txt
-
Crea tu archivo .env en el root ./
PROJECT_NAME='fastapi-RESTful-Boilerplate' #Database connection POSTGRES_USER= 'TU_USER' POSTGRES_PASSWORD= 'TU_PASSWORD' POSTGRES_DB= 'TU_DB_NAME' POSTGRES_HOST= 'TU_LOCAL_HOST' POSTGRES_PORT= 5432 SECRET_KEY = 'TU_SECRET_KEY' ALGORITHM = 'HS256'
-
Realiza las migraciones con alembi
- alembic init migrations (Inicializa la migracion). Genera un alembic.init
- en alembic.init borrar sqlalchemy.url
- En migrations/env.py antes de run_migrations_offline() incluir:
# Importa tu configuración de la base de datos from app.core.config import settings # Importa la base y los modelos from app.db.database import Base # Configuración de Alembic config = context.config config.set_main_option('sqlalchemy.url', settings.SQLALCHEMY_DATABASE_URI) if config.config_file_name is not None: fileConfig(config.config_file_name) # Registra el metadata de los modelos target_metadata = Base.metadata
- alembic revision —autogenerate -m “crear modelos” #Hace un commit de los modelos
- alembic upgrade heads
-
Inicializa la aplicacion
uvicorn main:app --reload
Este proyecto está licenciado bajo la MIT License.