https://github.com/jaennova/repotech-api
https://github.com/jaennova/repotech-api
Last synced: 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/jaennova/repotech-api
- Owner: jaennova
- Created: 2024-12-14T21:19:17.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2025-01-18T05:06:09.000Z (4 months ago)
- Last Synced: 2025-01-23T06:16:14.054Z (4 months ago)
- Language: Python
- Homepage: https://repo-tech.onrender.com
- Size: 32.2 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# API de Recursos Tecnológicos
## Descripción
API REST construida con FastAPI para gestionar recursos tecnológicos y sus tags asociados. La API permite crear, listar, buscar y eliminar recursos y tags, utilizando SQLAlchemy para la gestión de base de datos y Pydantic para la validación de datos.## Estructura del Proyecto
```
repotech-api/
├── app/
│ ├── __init__.py
│ ├── main.py
│ ├── database.py
│ ├── models.py
│ ├── routes.py
│ ├── schemas.py
│ └── middleware.py
├── .env
├── requirements.txt
└── .gitignore
```## Tecnologías Principales
- FastAPI
- SQLAlchemy
- Pydantic
- PostgreSQL
- Uvicorn
- Gunicorn (para producción)## Requisitos
- Python 3.7 o superior
- PostgreSQL## Instalación
1. Clonar el repositorio:
```bash
git clone https://github.com/jaennova/repotech-api.git
cd repotech-api
```2. Crear y activar entorno virtual:
```bash
python -m venv venv
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows
```3. Instalar dependencias:
```bash
pip install -r requirements.txt
```4. Configurar variables de entorno:
Crear archivo `.env` en la raíz del proyecto:
```
DATABASE_URL=postgresql://usuario:contraseña@localhost:5432/nombrebd
```## Ejecución
### Desarrollo
```bash
uvicorn app.main:app --reload
```### Producción
```bash
gunicorn app.main:app --workers 4 --worker-class uvicorn.workers.UvicornWorker
```## Endpoints de la API
### Recursos
- **GET /**: Mensaje de bienvenida
- **POST /recursos/**: Crear nuevo recurso
- **GET /recursos/**: Obtener lista de recursos
- Parámetros opcionales:
- orden_por: Campo por el cual ordenar (titulo, fecha, reciente)
- direccion: Dirección del ordenamiento (asc o desc)
- skip: número de registros a saltar
- limit: límite de registros por página
- **GET /recursos/{recurso_id}**: Obtener recurso por ID
- **DELETE /recursos/{recurso_id}**: Eliminar recurso por ID
- **DELETE /recursos/nombre/{titulo}**: Eliminar recurso por título
- **GET /recursos/buscar/**: Buscar recursos con filtros y paginación
- Parámetros opcionales:
- q: término de búsqueda
- tag: filtrar por tag
- skip: número de registros a saltar
- limit: límite de registros por página### Tags
- **GET /tags/**: Obtener lista de tags
- **DELETE /tags/{tag_id}**: Eliminar tag por ID
- **DELETE /tags/nombre/{nombre}**: Eliminar tag por nombre## Ejemplos de Uso
### Ordenamiento de Recursos
```bash
# Ordenar alfabéticamente por título (ascendente)
GET /recursos/?orden_por=titulo&direccion=asc# Ordenar por fecha de creación (más recientes primero)
GET /recursos/?orden_por=fecha&direccion=desc# Ordenar por última actualización
GET /recursos/?orden_por=reciente&direccion=desc# Combinar ordenamiento con paginación
GET /recursos/?orden_por=titulo&direccion=asc&skip=0&limit=10
```
### Busqueda y filtrado
```bash
# Buscar recursos con término específico
GET /recursos/buscar/?q=python# Filtrar por tag
GET /recursos/buscar/?tag=backend# Búsqueda combinada con paginación
GET /recursos/buscar/?q=python&tag=backend&skip=0&limit=10
```
## Modelos de Datos### Recurso
```json
{
"titulo": "string",
"descripcion": "string",
"url": "string",
"tags": ["string"]
}
```### Tag
```json
{
"id": "integer",
"nombre": "string"
}
```## Características
- CORS habilitado para integración con frontend (repotech.vercel.app y localhost:4321)
- Búsqueda y filtrado de recursos
- Paginación de resultados
- Manejo de errores personalizado
- Validación de datos con Pydantic
- Soporte para PostgreSQL
- Documentación automática (Swagger UI)## Ejemplo de Búsqueda y Paginación
```
GET /recursos/buscar/?q=python&tag=backend&skip=0&limit=10
```
Respuesta:
```json
{
"total": 100,
"recursos": [],
"skip": 0,
"limit": 10
}
```## Documentación API
La documentación interactiva está disponible en:
- Swagger UI: `/docs`
- ReDoc: `/redoc`## Despliegue
La API está desplegada en Render y utiliza una base de datos PostgreSQL.