Con el tiempo, toda API necesita evolucionar:
👉 El problema: ¿cómo mejorar la API sin romper a los clientes que ya la usan? La solución es el versionado de APIs, que permite mantener varias versiones en paralelo.
El versionado es la práctica de asignar un número de versión a la API (ejemplo: v1
, v2
) para indicar qué conjunto de reglas, endpoints y respuestas se aplica.
Beneficios
Existen varias formas de implementar versiones en APIs REST:
/api/v1/usuarios
/api/v2/usuarios
Ventajas: claro y fácil de entender; compatible con navegadores, Postman y cURL.
Desventajas: la URL cambia con cada versión, lo que puede generar duplicación de código.
GET /usuarios
Accept: application/json; version=2
Ventajas: la URL permanece igual; el cliente decide la versión mediante un header.
Desventajas: menos visible a simple vista; más difícil de probar directamente en el navegador.
GET /usuarios?version=2
Ventajas: fácil de implementar.
Desventajas: no es estándar; puede generar confusión si se mezclan con otros query params.
Versión 1 (v1)
GET /api/v1/usuarios/1
Respuesta:
{
"id": 1,
"nombre": "Ana"
}
Versión 2 (v2)
GET /api/v2/usuarios/1
Respuesta:
{
"id": 1,
"nombre": "Ana",
"email": "ana@ejemplo.com",
"telefono": "+54 351 1234567"
}
👉 La v2 agrega nuevos campos (email
, telefono
) sin romper la v1.
Cuando se lanza una nueva versión:
Ejemplo de mensaje de deprecación
{
"aviso": "La versión v1 quedará obsoleta en diciembre 2025. Por favor migre a v2."
}
v1
) para evitar problemas futuros.from fastapi import FastAPI
app = FastAPI()
@app.get("/api/v1/usuarios/{id}")
def get_usuario_v1(id: int):
return {"id": id, "nombre": "Ana"}
@app.get("/api/v2/usuarios/{id}")
def get_usuario_v2(id: int):
return {"id": id, "nombre": "Ana", "email": "ana@ejemplo.com"}
const express = require("express");
const app = express();
app.get("/api/v1/usuarios/:id", (req, res) => {
res.json({ id: req.params.id, nombre: "Ana" });
});
app.get("/api/v2/usuarios/:id", (req, res) => {
res.json({ id: req.params.id, nombre: "Ana", email: "ana@ejemplo.com" });
});
app.listen(3000, () => console.log("Servidor en http://localhost:3000"));
👉 Cada versión se mantiene independiente, permitiendo cambios sin romper la anterior.
El versionado de APIs es necesario para permitir la evolución sin romper integraciones existentes.
/api/v1
, /api/v2
).👉 En resumen: el versionado es la clave para APIs REST duraderas y confiables.