Versionado de REST APIs: Estrategias y Mejores Prácticas
El versionado de REST APIs asegura que los clientes existentes continúen funcionando de forma estable incluso cuando la API sufre cambios.
Descripción Compacta
El versionado de REST APIs es la gestión deliberada de cambios en una interfaz para no afectar a los clientes existentes. Existen varias estrategias, las más comunes se implementan en la ruta, a través de encabezados o mediante negociación de contenido. Una buena estrategia de versionado define reglas claras para cambios compatibles e incompatibles, comunica deprecaciones con antelación y facilita una transición ordenada de una versión a la siguiente. El versionado no es un detalle técnico, sino un componente esencial de la gestión del ciclo de vida de la API y de la relación a largo plazo con quienes utilizan la interfaz.
Componentes Importantes de REST APIs
Distinguir Cambios Incompatibles y Compatibles
No todos los cambios en una API requieren una nueva versión. Agregar campos opcionales, nuevos endpoints o filtros adicionales es compatible y puede introducirse sin necesidad de una nueva versión. Los cambios incompatibles, como eliminar campos, cambiar tipos de datos o mover endpoints, requieren una nueva versión para que los clientes existentes no se rompan.
URI Versioning
En el versionado por URI, la versión se integra directamente en la URL, por ejemplo /v1/customers o /api/v2/orders. Es la variante más simple y común, porque la versión es visible de un vistazo y se usa sin problemas en enlaces, logs y caché.
Header Versioning
En el versionado por encabezado, la versión se transmite a través de un encabezado propio como api-version: 1 o Accept-Version: v2. La URL permanece limpia, pero la versión no es directamente visible para quien revisa la URL. Esta variante funciona bien cuando la superficie de la API debe permanecer independiente de la URL.
Content Negotiation
En la negociación de contenido, el cliente indica a través del encabezado Accept qué versión espera, por ejemplo Accept: application/vnd.shop.v1+json. Es muy flexible, pero también más complejo de implementar y más difícil de entender para usuarios menos experimentados.
Versionado Semántico
El versionado semántico, conocido en el desarrollo de software, también puede usarse en APIs. Las versiones mayores indican cambios incompatibles, las versiones menores nuevas características compatibles y las versiones de parche pequeñas correcciones. Para APIs, a menudo solo la versión mayor es visible en la URL.
Deprecación y Sunset
Cuando una versión de API debe ser reemplazada, la marcas como deprecated. Informa a los usuarios con antelación sobre el fin de vida útil, documenta la migración y proporciona tiempo suficiente para la transición. Encabezados como Sunset o Deprecation ayudan a indicar el fin de una versión de forma legible por máquina.
Versionado en la Documentación
Cada versión debe estar claramente documentada, incluyendo registro de cambios, guía de migración y período de soporte. Los usuarios deben identificar rápidamente qué versión utilizan y qué cambios trae una nueva versión.
Caché y Versionado
El caché debe considerarse al versionar. Las URLs con versión en la ruta son especialmente amigables con caché, porque diferentes versiones tienen URLs diferentes. Con versionado por encabezado hay que tener cuidado, porque los cachés a menudo usan solo la URL como clave e ignoran los encabezados.
Compatibilidad Hacia Atrás
La compatibilidad hacia atrás significa que las nuevas versiones no afectan a la versión anterior. Las versiones antiguas permanecen accesibles durante el tiempo de soporte anunciado. Evita desactivar versiones antiguas prematuramente sin haber informado adecuadamente a los usuarios.
Versionado de API como Proceso
El versionado solo funciona si está anclado en el equipo como un proceso. Se necesitan reglas claras para releases, revisiones, comunicación y monitoreo. Cada versión debe tener un rol de propietario definido y un ciclo de vida claro.
Ejemplo Práctico de Versionado de REST API
Un proveedor de Software-as-a-Service gestiona una API de clientes. Después de dos años, los datos de dirección deben estructurarse, lo que representa un cambio incompatible.
Versión anterior v1:
GET /v1/customers/42
{
"id": 42,
"name": "Musterfirma GmbH",
"address": "Musterstraße 12, 10115 Berlin"
}
Nueva versión v2:
GET /v2/customers/42
{
"id": 42,
"name": "Musterfirma GmbH",
"address": {
"street": "Musterstraße 12",
"zip": "10115",
"city": "Berlin",
"country": "DE"
}
}
Comunicación a los usuarios:
HTTP/1.1 200 OK
Deprecation: true
Sunset: Sat, 31 Dec 2026 23:59:59 GMT
Link: </v2/customers/42>; rel="successor-version"
De esta forma, los clientes existentes pueden continuar usando v1 mientras migran a tiempo a v2. La nueva versión es claramente accesible y la antigua se retira de forma planificada.
FAQ: Versionado de REST APIs
1. ¿Qué es el versionado de REST APIs?
2. ¿Cuándo necesita una API una nueva versión?
3. ¿Cuál es la diferencia entre URI y Header Versioning?
4. ¿Qué es Content Negotiation en APIs?
5. ¿Qué significa Deprecation?
6. ¿Qué es el encabezado Sunset?
7. ¿Siempre hay que soportar muchas versiones de API?
8. ¿Qué es un cambio compatible?
9. ¿Qué es un cambio incompatible?
10. ¿Cómo se documentan las versiones de API?
11. ¿Qué es versionado semántico?
12. ¿Cómo afecta el versionado al caché?
13. ¿Qué es compatibilidad hacia atrás?
14. ¿Hay que especificar versiones de API en OpenAPI?
15. ¿Qué papel juega el versionado en el ciclo de vida de la API?
Continúa en el camino de aprendizaje de APIs
El siguiente artículo en el camino de aprendizaje de APIs aborda REST API Fehlerbehandlung: Statuscodes und Error Objects — cómo estructurar, estandarizar y manejar errores en APIs de forma amigable para el cliente.
Fuentes
- https://www.rfc-editor.org/rfc/rfc9110
- https://opensource.zalando.com/restful-api-guidelines/index.html
- https://developer.mozilla.org/docs/Web/HTTP/Headers/Accept
Recomendaciones de libros para desarrollo de APIs
Si quieres profundizar en versionado de APIs, diseño de APIs y arquitectura de software, te recomendamos los siguientes libros:
Keine Bücher für Kategorie "api-development" gefunden.



