Versionado Semántico

Ciclo De Vida Y Versionado Jan 6, 2025 HTTP

Definicion

¿Cómo comunicas a tus usuarios si una actualización es segura de instalar o podría romper todo? El Versionado Semántico (SemVer) responde esto con un simple sistema de tres números: MAJOR.MINOR.PATCH. Cada número te dice algo específico sobre qué cambió, para que los usuarios puedan tomar decisiones informadas sobre actualizar.

Las reglas son sencillas: incrementa MAJOR cuando haces cambios incompatibles (cosas que romperán código existente), incrementa MINOR cuando añades características de forma compatible hacia atrás (cosas nuevas, nada se rompe), e incrementa PATCH cuando arreglas bugs sin cambiar funcionalidad (solo correcciones, todo funciona como antes). La versión 2.4.1 te dice instantáneamente: esta es la segunda iteración mayor, con 4 actualizaciones de características desde entonces, y 1 corrección de bugs desde la última característica.

Esto importa enormemente en el mundo real porque el software depende de otro software. Tu app podría usar una librería, que usa otra librería, que usa tres más. Cuando una de esas dependencias profundas lanza una actualización, necesitas saber: ¿es esto seguro? ¿Romperá mi app? Una actualización de patch (2.4.1 a 2.4.2) debería ser completamente segura. Una actualización menor (2.4.1 a 2.5.0) añade características pero no debería romper código existente. Una actualización mayor (2.4.1 a 3.0.0) podría requerir cambios en tu código. Este protocolo de comunicación permite que miles de paquetes coexistan y se actualicen sin caos.

Ejemplo

Paquetes npm: Cuando ejecutas npm install express, npm usa SemVer para gestionar dependencias. Tu package.json podría decir "express": "^4.18.2", significando “instala la versión 4.18.2 o cualquier actualización compatible en el rango 4.x.”

Actualizaciones de iOS del iPhone: Apple usa un sistema similar a SemVer. iOS 16 a iOS 17 fue una actualización mayor con cambios significativos. iOS 17.0 a iOS 17.1 fue una actualización menor con nuevas características. iOS 17.1.1 fue un patch arreglando bugs.

Versiones del navegador Chrome: Chrome 118.0.5993.88 sigue principios de SemVer. La versión mayor 118 indica el ciclo de lanzamiento de características, y los números de patch muestran correcciones menores.

Versionado de APIs: Cuando la API de Stripe pasa de v2023-08-16 a v2024-01-15, el formato basado en fechas sirve un propósito similar - dejándote saber cuándo ocurrieron cambios significativos.

Analogia

El Sistema de Modelos de Coches: Piensa en cómo se versionan los coches. Un modelo completamente rediseñado (nueva generación) es como una versión mayor - todo cambió. Un refresh de medio ciclo con nuevas características (infotainment actualizado, nueva opción de motor) es una versión menor. Una corrección de recall para un problema específico es un patch. El Honda Civic 2024 2.0L Sport te está diciendo generación (rediseño 2024), variante (2.0L), y acabado (Sport).

El Sistema de Ediciones de Libros de Texto: Los libros de texto usan un concepto similar. Una nueva edición (5ª a 6ª edición) podría reorganizar capítulos y actualizar contenido significativamente - eso es un cambio mayor. Una impresión revisada corrige erratas y errores - eso es un patch. El número de edición dice a los estudiantes si pueden usar una versión más antigua para clase.

La Versión de Receta: Imagina la receta de un chef. Cambiar la proteína principal (pollo a pescado) es un cambio mayor - es un plato diferente. Añadir una guarnición o acompañamiento es un cambio menor - nuevas características, mismo plato. Corregir una errata en el tiempo de cocción es un patch - solo una corrección.

El Diálogo de Actualización de Software: ¿Sabes cómo tu móvil a veces dice “actualización de seguridad importante” versus “nuevas características disponibles”? Eso es esencialmente comunicar actualizaciones de patch versus menores en lenguaje amigable para el usuario.

Code Example


// Versionado semántico en APIs
GET /v2.4.1/payments        // Versión completa
GET /v2/payments            // Solo versión mayor (recomendado)

// Versión en headers de respuesta
[HTTP/1.1](https://reference.apios.info/es/terms/http-1-1/) 200 OK
X-API-Version: 2.4.1

// Interpretación de SemVer:
// 1.0.0 → Lanzamiento inicial
// 1.1.0 → Añadido nuevo método de pago (compatible hacia atrás)
// 1.1.1 → Corregido bug de cálculo de impuestos
// 2.0.0 → Cambiado modelo de autenticación (INCOMPATIBLE)
// 2.1.0 → Añadidos endpoints de suscripción
// 2.1.1 → Corregida lógica de reintento de webhooks

// Compatibilidad de versiones
{
  "apiVersion": "2.4.1",
  "minimumClientVersion": "2.0.0",
  "deprecatedVersions": ["1.x"],
  "sunset": {
    "version": "1.x",
    "date": "2025-12-31"
  }
}