ApiVersioning
Clase utilitaria para crear y gestionar múltiples instancias de Axios con diferentes versiones de API, optimizando el reuso de conexiones.
La idea de esto es tener API’s con diferentes versiones y poder manejarlas de manera sencilla y centralizada.
Imagina que tienes tus API’s versionadas de la siguiente manera:
https://api.tudominio.com/v1
https://api.tudominio.com/v2
https://api.tudominio.com/2019-01-01
En este ejemplo, el dominio es el mismo, pero cada versión de la API tiene una URL diferente. Con ApiVersioning
puedes aprovechar esto para crear instancias de Axios con la URL base y su versión correspondiente
Uso Básico
Crea y obtén instancias versionadas de Axios:
import { ApiVersioning } from 'tu-libreria';import axios from 'axios';
// Configuración inicialconst apiManager = new ApiVersioning(import.meta.env.VITE_API_URL); // Usando variable de entorno
// Obtener instancias para diferentes versionesconst apiV1 = apiManager.getInstance('v1');const apiV2 = apiManager.getInstance('v2');
// Ejemplo de usoconst fetchUsers = async () => { try { const response = await apiV1.get('/users'); return response.data; } catch (error) { if (axios.isAxiosError(error)) { console.error('Error en v1:', error.response?.data); } throw error; }};
Constructor
new ApiVersioning(baseUrl: string)
Crea una nueva instancia del gestor de versiones.
Parámetros:
Nombre | Tipo | Descripción |
---|---|---|
baseUrl | string | URL base de la API (ej: https://api.tudominio.com ) |
Métodos
getInstance(version: string)
Obtiene una instancia de Axios para una versión específica (crea una nueva si no existe).
Parámetros:
Nombre | Tipo | Descripción |
---|---|---|
version | string | Versión de la API (ej: 'v1' , 'v2' ) |
Retorna:
Instancia configurada de Axios con baseURL
establecida a:
${baseUrl}/${version}
Ejemplo Avanzado
// Configuración centralizadaconst API_BASE_URL = import.meta.env.VITE_API_URL;
// Uso con diferentes versiones en paraleloconst mainApi = new ApiVersioning(API_BASE_URL);
export const apiEndpoints = { v1: mainApi.getInstance('v1'), v2: mainApi.getInstance('v2'), legacy: mainApi.getInstance('2019-01-01')};
// Uso en componentesconst fetchLegacyData = () => apiEndpoints.legacy.get('/historical-records');
Beneficios Clave
-
Instancias Singleton:
Evita múltiples instancias para la misma versión -
Configuración Centralizada:
Cambios en la URL base se propagan a todas las versiones -
Extensible:
Fácilmente adaptable para agregar:- Interceptores globales
- Configuraciones personalizadas por versión
- Manejo centralizado de errores
Demo en vivo
Puedes ver un ejemplo de uso en vivo en CodeSandbox.
Recursos Adicionales
API Reference
Constructor y métodos de la clase ApiVersioning
.
new ApiVersioning(baseUrl: string)
Crea una nueva instancia del gestor de versiones.
Parámetros:
Nombre | Tipo | Descripción |
---|---|---|
baseUrl | string | URL base de la API (ej: https://api.tudominio.com ) |
getInstance(version: string)
Obtiene una instancia de Axios para una versión específica (crea una nueva si no existe).
Parámetros:
Nombre | Tipo | Descripción |
---|---|---|
version | string | Versión de la API (ej: 'v1' , 'v2' ) |
Retorna:
Instancia configurada de Axios con baseURL
establecida a:
${baseUrl}/${version}