Skip to content
IRC-CodingIRC-Coding
REST APIAPI VersionamientoURI VersioningHeader VersioningContent NegotiationAPI Deprecation

Versionamiento de REST API: Estrategias y Mejores Prácticas

Domina el versionamiento de REST API: URI Versioning, Header Versioning, Content Negotiation y deprecación para APIs estables.

S

schutzgeist

7 min read
Versionamiento de REST API: Estrategias y Mejores Prácticas

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?

El versionado de REST APIs es la gestión deliberada de cambios en una API para no afectar a los clientes existentes. Permite introducir nuevas características y corregir errores sin romper integraciones antiguas.

2. ¿Cuándo necesita una API una nueva versión?

Se necesita una nueva versión en cambios incompatibles, como eliminar campos, cambiar tipos de datos, mover endpoints o alterar el comportamiento de operaciones existentes.

3. ¿Cuál es la diferencia entre URI y Header Versioning?

En URI Versioning la versión está en la URL, por ejemplo /v1/customers. En Header Versioning se transmite a través de un encabezado como api-version. URI Versioning es más visible y cacheable.

4. ¿Qué es Content Negotiation en APIs?

Content Negotiation usa el encabezado Accept para negociar versión y formato. Por ejemplo, Accept: application/vnd.shop.v1+json. Es flexible, pero más complejo que URI Versioning.

5. ¿Qué significa Deprecation?

Deprecation significa marcar una versión de API o endpoint como obsoleto. Se notifica a los usuarios y se les da tiempo para migrar a una versión más nueva antes de que la versión antigua se desactive.

6. ¿Qué es el encabezado Sunset?

El encabezado Sunset indica el fin de vida programado de una API o versión. Es legible por máquina y ayuda a los clientes a detectar automáticamente cuándo una versión ya no estará disponible.

7. ¿Siempre hay que soportar muchas versiones de API?

No, mantener demasiadas versiones en paralelo aumenta el esfuerzo y los costos de mantenimiento. Soporta solo las versiones necesarias para los usuarios y comunica fechas de desactivación claras.

8. ¿Qué es un cambio compatible?

Los cambios compatibles agregan nuevas funcionalidades sin afectar a los clientes existentes. Ejemplos incluyen nuevos campos opcionales, nuevos filtros, nuevos endpoints o códigos de estado adicionales.

9. ¿Qué es un cambio incompatible?

Los cambios incompatibles alteran funcionalidades existentes de forma que los clientes antiguos ya no funcionan correctamente. Incluyen eliminar campos, cambiar campos obligatorios, mover endpoints o cambiar tipos de datos.

10. ¿Cómo se documentan las versiones de API?

Las versiones deben documentarse en un changelog que liste cambios compatibles e incompatibles. Una guía de migración ayuda a los usuarios a cambiar de una versión a la siguiente.

11. ¿Qué es versionado semántico?

El versionado semántico usa versiones Mayor, Menor y Parche. Mayor indica cambios incompatibles, Menor nuevas características compatibles y Parche correcciones de errores. En APIs, a menudo solo la versión Mayor aparece en la URL.

12. ¿Cómo afecta el versionado al caché?

URI Versioning es especialmente amigable con caché, porque diferentes versiones tienen URLs diferentes. Con Header Versioning hay que configurar los cachés para considerar el encabezado de versión.

13. ¿Qué es compatibilidad hacia atrás?

La compatibilidad hacia atrás significa que nuevas versiones o cambios no tienen efectos negativos en clientes existentes. Las versiones antiguas permanecen disponibles durante el tiempo anunciado y funcionan sin cambios.

14. ¿Hay que especificar versiones de API en OpenAPI?

Sí, OpenAPI permite especificar la versión de la API en el campo info.version. Con URI Versioning, la versión a menudo también se refleja en la URL de servidor o en las rutas.

15. ¿Qué papel juega el versionado en el ciclo de vida de la API?

El versionado es una parte central del ciclo de vida de la API. Acompaña planificación, lanzamiento, operación, deprecación y desactivación de una API. Sin un versionado claro, es difícil lograr un uso estable y a largo plazo 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

  1. https://www.rfc-editor.org/rfc/rfc9110
  2. https://opensource.zalando.com/restful-api-guidelines/index.html
  3. 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.

Volver al blog
Share:

Entradas relacionadas