Skip to content

Latest commit

 

History

History
 
 

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

README.md

Muestra de Aplicación Python

Una implementación completa de backend FastAPI para un Servicio Simple de Redes Sociales (SNS) que permite a los usuarios crear, recuperar, actualizar y eliminar publicaciones; agregar comentarios; y dar/quitar me gusta a las publicaciones.

🏗️ Descripción General de la Arquitectura

  • Framework: FastAPI con Python 3.12+
  • Base de Datos: SQLite (sns_api.db)
  • Documentación de API: Swagger UI + especificación OpenAPI 3.1
  • CORS: Habilitado para solicitudes de origen cruzado
  • Validación de Datos: Modelos Pydantic con validación integral

📁 Estructura del Proyecto

python/
├── main.py              # Punto de entrada de la aplicación FastAPI
├── models.py            # Modelos de datos y esquemas Pydantic
├── database.py          # Operaciones de base de datos SQLite
├── openapi.yaml         # Especificación OpenAPI 3.0.1
├── sns_api.db          # Archivo de base de datos SQLite (auto-creado)
├── README.md           # Esta documentación
└── .venv/              # Entorno virtual (creado durante la configuración)

🚀 Inicio Rápido

Prerrequisitos

Consulta el documento README para la preparación.

1. Configuración del Entorno

Primero, establece la variable de entorno de $REPOSITORY_ROOT.

# bash/zsh
REPOSITORY_ROOT=$(git rev-parse --show-toplevel)
# PowerShell
$REPOSITORY_ROOT = git rev-parse --show-toplevel

Luego, navega al directorio python y crea un entorno virtual:

cd $REPOSITORY_ROOT/complete/python

Crear entorno virtual

# Usando uv (recomendado)
uv venv .venv
# Usando Python estándar (alternativo)
python -m venv .venv

2. Activar Entorno Virtual

# En Linux/macOS
source .venv/bin/activate
# En Windows Command Prompt
.venv\Scripts\activate

3. Instalar Dependencias

# Usando uv (recomendado)
uv pip install fastapi uvicorn python-multipart pyyaml
# Usando pip (alternativo)
pip install fastapi uvicorn python-multipart pyyaml

4. Copiar Especificación OpenAPI

Copia la especificación OpenAPI del directorio padre.

# En Linux/macOS
cp ../openapi.yaml .
# En Windows Command Prompt
xcopy ..\openapi.yaml .

5. Ejecutar la Aplicación

Iniciar el servidor de desarrollo

uvicorn main:app --host 0.0.0.0 --port 8000 --reload

La aplicación estará disponible en:

  • URL Base de API: http://localhost:8000/api/
  • Swagger UI: http://localhost:8000/docs
  • Especificación OpenAPI: http://localhost:8000/openapi.json

📊 Esquema de Base de Datos

La aplicación usa SQLite con las siguientes tablas:

Tabla Posts

  • id (TEXT, PRIMARY KEY) - UUID
  • username (TEXT, NOT NULL) - Nombre de usuario del autor
  • content (TEXT, NOT NULL) - Contenido de la publicación
  • created_at (TEXT, NOT NULL) - Marca de tiempo ISO
  • updated_at (TEXT, NOT NULL) - Marca de tiempo ISO

Tabla Comments

  • id (TEXT, PRIMARY KEY) - UUID
  • post_id (TEXT, NOT NULL) - Clave foránea a posts
  • username (TEXT, NOT NULL) - Nombre de usuario del autor
  • content (TEXT, NOT NULL) - Contenido del comentario
  • created_at (TEXT, NOT NULL) - Marca de tiempo ISO
  • updated_at (TEXT, NOT NULL) - Marca de tiempo ISO

Tabla Likes

  • post_id (TEXT, NOT NULL) - Clave foránea a posts
  • username (TEXT, NOT NULL) - Usuario que dio me gusta
  • liked_at (TEXT, NOT NULL) - Marca de tiempo ISO
  • Clave primaria: (post_id, username)

🔌 Endpoints de API

Posts

  • GET /api/posts - Listar todas las publicaciones
  • POST /api/posts - Crear una nueva publicación
  • GET /api/posts/{postId} - Obtener una publicación específica
  • PATCH /api/posts/{postId} - Actualizar una publicación
  • DELETE /api/posts/{postId} - Eliminar una publicación

Comments

  • GET /api/posts/{postId}/comments - Listar comentarios para una publicación
  • POST /api/posts/{postId}/comments - Crear un comentario
  • GET /api/posts/{postId}/comments/{commentId} - Obtener un comentario específico
  • PATCH /api/posts/{postId}/comments/{commentId} - Actualizar un comentario
  • DELETE /api/posts/{postId}/comments/{commentId} - Eliminar un comentario

Likes

  • POST /api/posts/{postId}/likes - Dar me gusta a una publicación
  • DELETE /api/posts/{postId}/likes?username={username} - Quitar me gusta a una publicación

🧪 Probando la API

Usando cURL

Crear una Publicación

curl -X POST "http://localhost:8000/api/posts" \
  -H "Content-Type: application/json" \
  -d '{"username": "john_doe", "content": "¡Hola Mundo! Esta es mi primera publicación."}'

Obtener Todas las Publicaciones

curl -X GET "http://localhost:8000/api/posts"

Agregar un Comentario

curl -X POST "http://localhost:8000/api/posts/{POST_ID}/comments" \
  -H "Content-Type: application/json" \
  -d '{"username": "jane_smith", "content": "¡Excelente publicación!"}'

Dar Me Gusta a una Publicación

curl -X POST "http://localhost:8000/api/posts/{POST_ID}/likes" \
  -H "Content-Type: application/json" \
  -d '{"username": "alice_johnson"}'

Usando Swagger UI

  1. Navega a http://localhost:8000/docs
  2. Explora y prueba todos los endpoints de API de forma interactiva
  3. Ve esquemas de solicitud/respuesta y ejemplos

📝 Modelos de Datos

Modelos de Solicitud

  • NewPostRequest: {username: str, content: str}
  • UpdatePostRequest: {username: str, content: str}
  • NewCommentRequest: {username: str, content: str}
  • UpdateCommentRequest: {username: str, content: str}
  • LikeRequest: {username: str}

Modelos de Respuesta

  • Post: Objeto de publicación completo con metadatos y conteos
  • Comment: Objeto de comentario completo con metadatos
  • LikeResponse: Confirmación de me gusta con marca de tiempo

⚙️ Configuración

Variables de Entorno

La aplicación usa configuraciones por defecto pero puede ser personalizada:

  • Base de Datos: Archivo SQLite sns_api.db (auto-creado)
  • Host: 0.0.0.0 (todas las interfaces)
  • Puerto: 8000
  • CORS: Habilitado para todos los orígenes

Consideraciones de Producción

Para despliegue en producción, considera:

  1. Base de Datos: Cambia a PostgreSQL o MySQL
  2. Variables de Entorno: Usa para configuración sensible
  3. Seguridad: Agrega autenticación y autorización
  4. CORS: Restringe a dominios específicos
  5. Logging: Implementa logging estructurado
  6. Monitoreo: Agrega verificaciones de salud y métricas

🛠️ Desarrollo

Organización de Archivos

  • main.py: Configuración de aplicación FastAPI, middleware y definiciones de rutas
  • models.py: Modelos Pydantic para validación y serialización de datos
  • database.py: Operaciones SQLite, gestión de conexiones y funciones CRUD

Estilo de Código

El proyecto sigue:

  • Directrices de estilo Python PEP 8
  • Mejores prácticas de FastAPI
  • Patrones de programación funcional
  • Anotaciones de tipo en todo el código
  • Manejo integral de errores

Agregando Nuevas Características

  1. Define modelos Pydantic en models.py
  2. Agrega operaciones de base de datos en database.py
  3. Crea endpoints de API en main.py
  4. Actualiza la especificación OpenAPI si es necesario

🐛 Solución de Problemas

Problemas Comunes

  1. Puerto ya en uso: Cambia el puerto con --port 8001
  2. Problemas de entorno virtual: Recrea con rm -rf .venv && uv venv .venv
  3. Base de datos bloqueada: Detén todas las instancias ejecutándose de la aplicación
  4. Errores de importación: Asegúrate de que el entorno virtual esté activado

Modo Debug

Ejecuta con logging adicional:

uvicorn main:app --host 0.0.0.0 --port 8000 --reload --log-level debug

📚 Recursos Adicionales


Disclaimer: Este documento ha sido localizado por GitHub Copilot. Por lo tanto, puede contener errores. Si encuentras alguna traducción que sea inapropiada o errónea, por favor crea un issue.