Volver al portfolio

File Storage

API de almacenamiento de archivos con MinIO

Backend Go Storage Microservice

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.

6
Endpoints

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

Go
Docker
MinIO MinIO

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.