Primeros pasos con la API de actividades de XeniCómo reservar una actividadCómo buscar etiquetas y categorías de actividadesCómo cancelar una reserva de actividadCómo comprobar la disponibilidad de la actividadCómo obtener detalles de la actividadCómo recuperar los detalles de la reserva de actividadesCómo buscar actividades con filtrosCómo buscar destinos de actividadesAPI de alquiler de coches: introducciónAPI de alquiler de coches: comprensión de los campos de respuestaCómo reservar un alquiler de cochesCómo obtener detalles del vehículo de alquiler y complementos de equipoCómo recuperar o cancelar una reserva de alquiler de cochesCómo buscar autos de alquiler disponiblesCómo buscar ubicaciones de recogidaCómo utilizar los filtros de búsqueda de alquiler de cochesMejores prácticas de integración de API de ofertasPreguntas frecuentes sobre la API de ofertasPrimeros pasos con la API de ofertas de XeniReferencia de encabezados y parámetros de solicitud de API de ofertasOfertas API Monedas admitidas y localizaciónCómo mostrar ofertas en su aplicaciónCómo buscar ofertas de hoteles por ubicaciónCódigos de error de la API de vuelos y solución de problemasPrimeros pasos con la API de vuelos de XeniCómo reservar un vueloCómo comprobar la disponibilidad y el precio de los vuelosCómo confirmar o cancelar una reserva de vueloCómo recuperar las reglas de tarifas de un vueloCómo recuperar los detalles de la reserva de un vueloCómo buscar aeropuertos usando AutocompletarCómo buscar vuelosCómo utilizar filtros, clasificación y paginación de búsqueda de vuelosCómo comprobar la disponibilidad y el precio de las habitacionesCómo filtrar los resultados de los alquileres vacacionalesCómo obtener detalles, comodidades y accesibilidad de la propiedad del resortCómo mantener y confirmar una reserva de resortCómo liberar una retención de resortCómo recuperar los detalles de la reserva del resortCómo buscar complejos turísticos disponiblesCómo buscar destinos turísticosCómo buscar ubicaciones de alquiler vacacionalCómo buscar alquileres vacacionalesCómo utilizar filtros de búsqueda y clasificación de complejos turísticosComenzando con la API de Xeni ResortsAPI de Resorts: comprensión de los estados y políticas de las reservasPrimeros pasos con la API de alquileres vacacionalesPreguntas frecuentes sobre alquileres vacacionalesTipos de propiedades admitidas para alquileres vacacionalesComprensión de la búsqueda asincrónica para alquileres vacacionalesAutenticación y firmas APIReserva de hoteles: API directa y pago SSOManejo de errores, límites de tasas y mejores prácticasPrimeros pasos con la API de Xeni HotelesGestión de reservas: estado, recuperación y cancelaciónConfirmación de precios y ciclo de vida del tokenRecuperar detalles del hotel y disponibilidad de habitacionesBúsqueda de hoteles: ubicaciones, filtros y paginaciónBuscando HotelesGestión de sesiones e ID de correlaciónAutenticación API y obtención de claves API

Manejo de errores, límites de tasas y mejores prácticas

Última actualización: 2026-02-13

Manejo de errores, límites de tasas y mejores prácticas

Una integración de nivel de producción debe manejar los errores de API con elegancia, respetar los límites de velocidad y seguir las mejores prácticas de almacenamiento en caché y rendimiento. Este artículo cubre los tres temas para ayudarle a crear una integración confiable y eficaz.

Formato de respuesta de error

Cuando falla una llamada API, el cuerpo de la respuesta contiene un error estructurado:

JSON
{
  "message": "Description of the error",
  "status": 400
}

Algunas respuestas de error incluyen detalles adicionales:

JSON
{
  "error": {
    "message": "Detailed error description",
    "status": 400
  }
}

*

Códigos de estado HTTP

XENIKBPH24200
EstadoSignificadoComún CausasAcción
ÉxitoSolicitud completado normalmente.Procesar la respuesta datos.
400Bad SolicitudFaltan parámetros requeridos, formato de fecha no válido, coordenadas no válidas, cuerpo de solicitud mal formado.Valide los datos de su solicitud antes de enviarla. Verifique los campos y datos requeridos tipos.
401XEN IKBPH50No autorizadoDesaparecido, Firma de API caducada o no válida.Genere una nueva firma y vuelva a intentar la solicitud.
404No EncontradoID de propiedad, ID de reserva o ruta del punto final no válidos.Verifique que el ID exista y que la URL del punto final sea correcto.
429Demasiados SolicitudesLímite de velocidad excedido.Retroceda y vuelva a intentarlo después de que se restablezca la ventana. Consulte Límites de velocidad a continuación.
500Servidor interno ErrorProblema inesperado del lado del servidor.Reintente después de un breve retraso. Si persiste, comuníquese con el soporte.
503Servicio No disponibleAPI no está disponible temporalmente (mantenimiento, sobrecarga).Reintentar con exponencial retroceso.

*

Manejo de errores por punto final

Errores de autenticación (401)

La causa más común es una firma caducada. Implemente la lógica de actualización automática (consulte Autenticación y firmas API) y vuelva a intentar la solicitud fallida con la nueva firma.

async function apiCall(method, endpoint, data, correlationId) {  let signature = await signatureManager.getSignature();

try { return await makeRequest(method, endpoint, data, signature, correlationId); } catch (error) { if (error.status === 401) { // Signature may have expired — force refresh and retry once signature = await signatureManager.forceRefresh(); return await makeRequest(method, endpoint, data, signature, correlationId); } throw error; }}

Errores de búsqueda (sin resultados)

Una búsqueda de hotel puede arrojar cero resultados sin un estado de error. Esto no es una falla de API; significa que ninguna propiedad coincide con sus criterios. Maneje esto por:

  • Sugerir ubicaciones cercanas o rangos de fechas más amplios.
  • Filtros relajantes (por ejemplo, eliminar calificación de estrellas o restricciones de precio).
  • Mostrar un mensaje amigable de "no hay resultados".

Errores de disponibilidad

Las habitaciones pueden dejar de estar disponibles entre la búsqueda y la verificación de disponibilidad. Si la respuesta de disponibilidad devuelve una matriz vacía:

  • Informar al usuario que la habitación ya no está disponible.
  • Sugerir volver a buscar o consultar un hotel diferente.

Errores de precios

Si la confirmación del precio falla o el token no es válido:

  • Vuelva a ejecutar la verificación de disponibilidad para obtener un token de disponibilidad nuevo.
  • Confirma el precio nuevamente para obtener un nuevo token de precio.
  • Avisar al huésped si el precio ha cambiado.

Errores de reserva

Los errores en las reservas pueden ocurrir debido a tokens de precios vencidos, habitaciones agotadas o datos de huéspedes no válidos. Siempre:- Validar la información del huésped en el lado del cliente antes de enviarla.

  • Verifique la frescura del token de precios (período de 10 minutos) antes de reservar.
  • Mostrar un mensaje de error claro y ofrecer la opción de volver a intentarlo.

*

Límites de tarifas

La API de Xeni Hotels impone límites de tarifas para garantizar un uso justo y la estabilidad del sistema.

XENIKBPH_118__Ventana
AlcanceLímite
General Llamadas API100 solicitudes15 minutos
Chat/mensaje puntos finales20 solicitudes5 minutos

Encabezados de límite de tasa

La información del límite de tasa se incluye en los encabezados de respuesta:

XENIKBPH_149
EncabezadoDescripción
RateLimit-LimitMáximo número de solicitudes permitidas en el window.
RateLimit-RemainingNúmero de solicitudes restantes en el actual window.
RateLimit-ResetMarca de tiempo (segundos) cuando se restablece la ventana de límite de velocidad.

Manejo de 429 Respuestas

Cuando recibe una respuesta 429:

  1. Deja de hacer solicitudes inmediatamente.
  2. Espere hasta que se restablezca la ventana de límite de velocidad (verifique el encabezado RateLimit-Reset).
  3. Reanudar con patrones de solicitud normales.

No vuelva a intentar solicitudes con velocidad limitada en un ciclo cerrado; esto extenderá el período de recuperación.

*

Recomendaciones de almacenamiento en caché

El almacenamiento en caché inteligente reduce las llamadas API, mejora los tiempos de respuesta y se mantiene dentro de los límites de velocidad. A continuación se muestran las duraciones de caché recomendadas por tipo de datos:

Tipo de datosRecomendado TTLJustificación
Autocompletar ubicación resultados1 horaLas ubicaciones rara vez cambian. Es seguro almacenar en caché de forma agresiva.
Detalles del hotel (información de la propiedad)1 horaLas descripciones, servicios y fotos del hotel no cambian con frecuencia.
Búsqueda de hotel resultados30 minutosLos precios y la disponibilidad cambian con el tiempo. Caché para reutilización a corto plazo.
Disponibilidad de habitaciones5 minutosAltamente volátil. Las habitaciones se agotan y los precios cambian rápidamente.
Confirmaciones de preciosNo cacheCada confirmación de precio es única y específica del token. Llame siempre a la API nueva.

Estrategia de clave de caché

Genere claves de caché únicas a partir de los parámetros de solicitud. Un enfoque común:

// JavaScriptimport crypto from 'crypto';

function generateCacheKey(prefix, params) { const hash = crypto.createHash('md5') .update(JSON.stringify(params)) .digest('hex'); return cache:${prefix}:${hash};}

// Examples:generateCacheKey('location', { query: 'miami' });// → "cache:location:3f8c9a2b..."

generateCacheKey('search', { lat: 25.76, long: -80.19, checkIn: '2025-06-01', checkOut: '2025-06-05' });// → "cache:search:7d2e1f4a..."

*

Configuración de tiempo de espera

Establezca tiempos de espera de solicitud adecuados para cada llamada API. Nuestras recomendaciones:

Punto finalRecomendado Tiempo de espera
Generación de firma10 segundos
Autocompletar ubicación10 segundos
Búsqueda de hotel30 segundos
Detalles del hotel15 segundos
Verificación de disponibilidad30 segundos
Confirmación de precio15 segundos
Creación de reserva30 segundos

La búsqueda de hoteles y las comprobaciones de disponibilidad pueden tardar más porque consultan a varios proveedores en tiempo real.

*

Estrategia de reintento

No todos los errores son permanentes. Utilice una estrategia de reintento con retroceso exponencial para fallas transitorias:

XENIKB PH_304
Error Tipo¿Reintentar?Estrategia
401 No autorizadoSí (una vez)Actualizar firma, luego reintentar.
429 Tarifa limitadaSí (después espere)Espere la ventana de reinicio, luego reintentar.
500 Error del servidorSí (hasta 3)Retroceso exponencial: esperar 1s, 2s, 4s.
503 No disponibleSí (hasta 3)Retroceso exponencial: esperar 2s, 4s, 8s.
400 Malo SolicitudNoCorregir la solicitud. Volver a intentarlo con los mismos datos producirá el mismo error.
404 No EncontradoNoVerifique el ID del recurso. Volver a intentarlo no ayudará.

Ejemplo: Reintentar con retroceso exponencial

async function apiCallWithRetry(fn, maxRetries = 3) {  for (let attempt = 0; attempt <= maxRetries; attempt++) {    try {      return await fn();    } catch (error) {      const status = error.response?.status;

// Don't retry client errors (except 401 and 429) if (status && status >= 400 && status < 500 && status !== 401 && status !== 429) { throw error; }

if (attempt === maxRetries) throw error;

const delay = Math.pow(2, attempt) * 1000; // 1s, 2s, 4s await new Promise(resolve => setTimeout(resolve, delay)); } }}

*

Lista de verificación de preparación para la producción

Antes de publicarla, verifique que su integración cumpla con estos criterios:

ArtículoDetalle s
Firma actualización automáticaActualización de firmas antes de que expiren los 30 minutos window.
Gestión de ID de correlaciónCapturado de primera respuesta y reenviado en todas las llamadas posteriores. Reemplazado en búsquedas de nuevas ubicaciones.
Ciclo de vida del token manejoLos tokens de disponibilidad se utilizan solo para fijar precios. Para realizar la reserva se utilizan tokens de precios (TTL de 10 minutos). La caducidad se comprueba antes de su uso.
Error manejoSe manejan todos los códigos de error HTTP. 401 activa la actualización de la firma. 429 activa el retroceso.
Límite de velocidad cumplimientoLa aplicación respeta los límites de velocidad y no vuelve a intentar los 429 agresivamente.
Almacenamiento en cachéUbicaciones y detalles del hotel están almacenados en caché. La disponibilidad se almacena en caché brevemente o no en all.
Tiempos de esperaTodas las llamadas API tienen tiempos de espera configurados.
Seguridad de credencialesAPI La clave y el secreto se almacenan en variables de entorno, no en el código fuente.
Environment configuraciónUAT y las URL base de producción son configurables, no codificado.
Degradación eleganteSi se almacena en caché La capa (Redis) no está disponible, la aplicación recurre a la API directa. llamadas.
RegistroLlamadas API, errores y los eventos clave se registran para depuración y monitoreo.
Health comprobacionesLa aplicación expone un punto final de salud que verifica la conectividad a las dependencias (Redis, estado de firma de API de Xeni).

*

Obtener ayuda

Si encuentra problemas que no se resuelven con esta documentación:

  • Compruebe el mensaje de error: La API devuelve mensajes de error descriptivos que normalmente apuntan a la causa raíz.
  • Verifique primero en UAT: Pruebe su solicitud en el entorno UAT para aislar el problema.
  • Comuníquese con soporte: Comuníquese con su representante de cuenta Xeni con los siguientes detalles:

- La solicitud API completa (punto final, encabezados, cuerpo)
- La respuesta API completa (código de estado, encabezados, cuerpo)
- El ID de correlación de la sesión.
- La marca de tiempo de la solicitud.

¿Te resultó útil este artículo?