Gestión de sesiones e ID de correlación
La API de Xeni Hotels utiliza ID de correlación para vincular llamadas API relacionadas dentro de una única sesión de búsqueda y reserva. Comprender cómo funcionan los ID de correlación es esencial para una integración correcta. Este artículo explica el ciclo de vida de la sesión, cuándo cambian los ID de correlación y cómo administrarlos.
¿Qué es una identificación de correlación?
Un ID de correlación es un identificador único que la API genera y devuelve en los encabezados de respuesta de su primera llamada a la API (normalmente la búsqueda de ubicación/autocompletar). Vincula todas las llamadas posteriores (búsqueda de hotel, detalles, disponibilidad, precios y reservas) en una sesión coherente.
Piense en ello como un token de sesión para la API. Sin él, la API no puede asociar su verificación de disponibilidad con la búsqueda de hotel que la precedió.
Cómo se crean los ID de correlación
- Realiza su primera llamada API (generalmente
GET /hotels/api/v2/autocomplete). - La respuesta incluye un encabezado
x-correlation-id. - Capture este valor y lo incluya como encabezado
x-correlation-iden cada llamada API posterior.
Ejemplo: captura del ID de correlación
// JavaScript (axios)const response = await axios.get('/hotels/api/v2/autocomplete', { params: { key: 'Miami' }, headers: { 'Authorization': signature, 'Content-Type': 'application/json' }});
// Capture the correlation ID from response headersconst correlationId = response.headers['x-correlation-id'];
// Use it in all subsequent callsconst searchResponse = await axios.post('/hotels/api/v2/properties?page=1&limit=20', searchBody, { headers: { 'Authorization': signature, 'Content-Type': 'application/json', 'x-correlation-id': correlationId // Pass it forward }});
Ejemplo: Python
# Python (requests)response = requests.get( f"{base_url}/hotels/api/v2/autocomplete", params={"key": "Miami"}, headers={"Authorization": signature, "Content-Type": "application/json"})
Capture from response headerscorrelation_id = response.headers.get("x-correlation-id")
Use in subsequent callssearchresponse = requests.post( f"{baseurl}/hotels/api/v2/properties?page=1&limit=20", json=searchbody, headers={ "Authorization": signature, "Content-Type": "application/json", "x-correlation-id": correlationid })
*
Ciclo de vida de la sesión
Una sesión comienza con una búsqueda de ubicación y continúa durante todo el flujo de reserva:
┌─────────────────────────────────────────────────────┐│ SESSION START ││ ││ 1. searchLocations("Miami") ││ → API returns x-correlation-id: "abc-123" ││ ││ 2. searchHotels(lat, long, dates) ││ → Send x-correlation-id: "abc-123" ││ ││ 3. getHotelDetails(propertyId) ││ → Send x-correlation-id: "abc-123" ││ ││ 4. checkAvailability(propertyId, dates, occupancy) ││ → Send x-correlation-id: "abc-123" ││ ││ 5. getPrice(availabilityToken) ││ → Send x-correlation-id: "abc-123" ││ ││ 6. SSO Checkout or createBooking(pricingToken) ││ → Uses x-correlation-id: "abc-123" ││ ││ SESSION END │└─────────────────────────────────────────────────────┘
Se utiliza el mismo ID de correlación en todo el flujo. Todos los pasos están vinculados a la misma sesión.
*
¿Cuándo cambia el ID de correlación?
Se genera un nuevo ID de correlación cuando se realiza una búsqueda de nueva ubicación. Esto es así por diseño: una nueva búsqueda de ubicación inicia una nueva sesión.
Ejemplo: El usuario cambia de destino
1. User searches "Miami" → correlationId = "abc-123" → Hotels in Miami are displayed
- User searches "Las Vegas" → API returns NEW correlationId = "def-456" → Hotels in Las Vegas are displayed
- User selects a hotel in Las Vegas → Use correlationId "def-456" (NOT "abc-123") → The Miami session is effectively abandoned
Importante: Cuando una búsqueda de nueva ubicación arroja un nuevo ID de correlación, debe descartar el ID de correlación anterior y todos los datos de sesión asociados (resultados de búsqueda, tokens de disponibilidad, tokens de precios). Estos quedan invalidados cuando cambia la sesión.
*
Qué almacenar en tu sesión
Para gestionar el flujo de búsqueda a reserva, su aplicación debe mantener un estado de sesión que rastree estos valores:
| Campo | Establecer cuando | Usado Por |
|---|---|---|
| Ubicación buscar | Todas las llamadas API posteriores (encabezado) | |
ubicaciónDatos | Ubicación search | Búsqueda de hotel (coordenadas), pago SSO URL |
searchParams | Hotel search | Paginación, verificación de disponibilidad, pago SSO URL |
resultados de búsqueda | Hotel buscar | Mostrar al usuario, hotel selección |
propertyId | El usuario selecciona un hotel | Detalles, disponibilidad, pago SSO URL |
roomId | Disponibilidad comprobar | SSO pago URL |
availabilityToken | Disponibilidad consultar | Precio confirmación |
precioToken | Precio confirmación | SSO URL de pago, reserva creación |
precioTokenEmitido en | Precio confirmación | Verificación de vencimiento del token (ventana de 10 minutos) |
*
Recomendaciones de almacenamiento de sesiones
Sesiones del lado del servidorPara la mayoría de las integraciones, recomendamos almacenar los datos de la sesión en el lado del servidor con un TTL (tiempo de vida):
- Redis: ideal para el almacenamiento de sesiones con vencimiento automático. Establezca un TTL de 30 minutos para que coincida con la duración de la firma de la API.
- Almacenamiento en memoria: adecuado para desarrollo o implementaciones de un solo servidor. Utilice un Mapa con limpieza periódica.
- Base de datos: viable para la persistencia, pero agrega una marca de tiempo
last_activityy limpia las sesiones obsoletas.
TTL recomendado
Configure el TTL de su sesión en 30 minutos, coincidiendo con la vida útil de la firma API. Amplíe el TTL en cada interacción del usuario para mantener vivas las sesiones activas.
Limpieza de sesión
Cuando una sesión caduca o el usuario inicia una nueva búsqueda:
- Deseche el antiguo ID de correlación.
- Borre los resultados de búsqueda, los tokens y los datos de precios almacenados.
- La búsqueda de nueva ubicación establecerá una nueva sesión con una nueva ID de correlación.
*
Errores comunes
| Escollo | ConsecuenciaXENIKBPH1 18 | Solución |
|---|---|---|
No pasando x-correlation-id | Las llamadas API fallan o devuelven datos inconsistentes. | Siempre capture y reenvíe el ID de correlación después de la primera call. |
| Reutilización de ID de correlación antiguos | Referencia de llamadas de reserva o disponibilidad búsqueda obsoleta contexto. | Reemplace el ID de correlación cada vez que una nueva búsqueda de ubicación arroje uno nuevo. |
| Usar un token de disponibilidad después de obtener un precio token | La reserva falla. | Utilice siempre el pricingtoken de la confirmación de precios paso. |
| No se borran los datos de la sesión en una nueva búsqueda | Los tokens antiguos y los resultados de un destino anterior contaminan la nueva búsqueda flow. | Restablece todos los datos de la sesión (excepto el nuevo ID de correlación) cuando el usuario busca una nueva ubicación. |
*
_Artículo siguiente: Manejo de errores, límites de tasas y mejores prácticas
_