File Storage
API de almacenamiento de archivos con MinIO
Microservicio en Go para gestión de archivos con MinIO (S3-compatible). Incluye upload/download con validación MIME, autenticación por API key, rate limiting, y observabilidad con Prometheus.
1. Arquitectura
Handlers
Handlers HTTP con Chi router y middleware chain
Storage
Cliente MinIO con abstracción de operaciones de storage
Middleware
Autenticación, CORS, logging y rate limiting
2. Características
Core
Upload de Archivos
Upload multipart/form-data con validación de tamaño y tipo MIME
Download de Archivos
Descarga con headers de caché (1 año) y opción de descarga forzada
Validación MIME
Validación de tipos permitidos (JPEG, PNG, WebP, PDF) con sniffing
Eliminación
Eliminación de archivos con validación de key y autenticación
Seguridad
API Key Auth
Autenticación por header X-API-Key con validación constante
Rate Limiting
Limitación de 7 requests/min por IP para upload/validate
Path Traversal Protection
Protección contra ../ y paths absolutos en keys de archivos
Infraestructura
Observabilidad
Métricas Prometheus con contadores de uploads, downloads y errores
Logging Estructurado
Logs JSON con slog incluyendo request IDs y contexto
Production Ready
Docker multi-stage Alpine, usuario no-root y health checks
3. Tech Stack
4. API Reference
| Módulo | Endpoints |
|---|---|
| Archivos | 3 |
| Health | 2 |
5. Decisiones de Diseño
MinIO Abstraction
storage.Client envuelve el cliente MinIO con métodos de negocio. Esto permite cambiar el backend de storage sin modificar los handlers.
Timestamp-based Keys
Las keys se generan como {unix_nano}{ext} en lugar de UUIDs. Esto provee ordenamiento cronológico natural y evita colisiones.
MIME Sniffing
En lugar de confiar en el Content-Type del cliente, se usa http.DetectContentType() para sniffing del contenido real. Esto previene uploads de archivos maliciosos.