Cómo gestionar los límites de respuesta de la API de exportación de datos

La API de exportación de datos no paginará las respuestas. Si una solicitud devolviera más datos de los que permite la API en una sola respuesta, la solicitud fallaría y se mostraría un error, en lugar de devolver un resultado parcial. Planifique sus integraciones para mantenerse dentro de los límites, ya sea reduciendo el intervalo de fechas, disminuyendo el número de impresoras por solicitud o ambas cosas.

Cuáles son los límites

Se aplican dos tipos de límites a las solicitudes que incluyen un intervalo de fechas:

Intervalo de fechas máximo
Si el intervalo de tiempo entre startDateTime y endDateTime supera los siete días, la API devuelve una respuesta 400 con el código de error ERR_DATE_RANGE_EXCEEDED. Reduzca la duración del intervalo de tiempo solicitado y vuelva a enviar la solicitud.
Tamaño máximo de la respuesta
El tamaño máximo admitido de un archivo de respuesta es de 6 MB, lo que debería ser suficiente para almacenar los datos de casi 10 000 trabajos. Si los datos coincidentes con una solicitud superan el tamaño máximo de la respuesta, la API devuelve una respuesta 413 con el código de error ERR_RESPONSE_LIMIT_EXCEEDED. El cuerpo de la respuesta incluye un valor maxJobs que indica el límite vigente. Para solucionar el problema, reduzca el intervalo de fechas, solicite menos impresoras o haga ambas cosas, y vuelva a enviar la solicitud.

Las solicitudes de planificación deben ajustarse a los límites establecidos

Para diseñar una integración que se mantenga de forma fiable dentro de los límites de respuesta, tenga en cuenta los siguientes factores:

  • Volumen de trabajos por impresora. Una impresora de alto rendimiento con alimentación continua puede producir muchos más trabajos por hora que una impresora de hojas sueltas de bajo volumen. Si combina ambos tipos en su parque de impresoras, serán las impresoras de gran volumen las que determinen lo reducidas que deben ser sus franjas horarias.
  • Número de impresoras por solicitud. Cada solicitud puede incluir varios valores de printerId. Agrupar varias impresoras en una sola solicitud resulta práctico, pero cada impresora adicional aumenta el tamaño de la respuesta y la probabilidad de superar el límite.
  • Hora del día. Si su empresa funciona por turnos, los trabajos y los cambios de estado se concentran en determinadas horas. Un intervalo de 24 horas puede arrojar volúmenes muy diferentes en función de cuándo comiencen y terminen esas 24 horas.
  • Tolerancia para los reintentos. Si una solicitud falla con el error ERR_RESPONSE_LIMIT_EXCEEDED, su integración debe dividir la solicitud y volver a intentarla. Diseñar desde el principio para ventanas más pequeñas suele ser menos complejo que implementar la división dinámica.

Patrones recomendados

Los siguientes patrones funcionan bien en los casos más habituales de integración:

Extracto nocturno para la elaboración de informes
Ejecute un trabajo programado una vez al día que solicite los datos de las últimas 24 horas, una impresora cada vez. Este patrón es sencillo de implementar, permite volver a intentarlo fácilmente en caso de fallo y garantiza que cada respuesta sea breve. Combine las respuestas de cada impresora en su proceso posterior.
Extracto por hora para paneles de control en tiempo casi real
Ejecute un trabajo programado una vez por hora que solicite los datos de la hora anterior de todas las impresoras en una sola consulta. Los intervalos por hora permiten mantener un tamaño reducido de las respuestas, incluso en el caso de impresoras de gran volumen. Si su flota es numerosa, solicite las impresoras por lotes, en lugar de todas a la vez.
Relleno de datos históricos
Para introducir datos históricos en un almacén de datos, recorra el intervalo de tiempo en ventanas de tamaño fijo (por ejemplo, seis horas por solicitud) y sus impresoras en pequeños grupos. Procese una ventana cada vez y guarde los resultados antes de ir a la siguiente ventana. Si una ventana falla con el error ERR_RESPONSE_LIMIT_EXCEEDED, divida dicha ventana en dos partes y vuelva a intentarlo con cada una de ellas.
Estado actual de la impresora para su supervisión
Para supervisar el estado actual de cada impresora de su parque sin consultar el historial, utilice la llamada /printer-states con el parámetro currentState=true. La respuesta incluye una fila por motor y no se ve afectada por el intervalo de fechas, por lo que una sola solicitud puede abarcar toda la flota.

Cómo gestionar los errores de límite de respuesta en su integración

Cuando reciba una respuesta 413 con el código ERR_RESPONSE_LIMIT_EXCEEDED, lleve a cabo una o varias de las siguientes acciones antes de volver a intentar la solicitud:

  • Reduzca el intervalo de tiempo. Dividir la ventana por la mitad es una estrategia fiable; si la solicitud dividida a la mitad sigue fallando, vuelva a dividirla.
  • Reduzca el número de valores de printerId en la solicitud. Si una impresora se encarga de la mayor parte del volumen, solicite esa impresora por separado.
  • Si la solicitud se refiere a una instantánea actual en lugar de a un historial, utilice currentState=true en /printer-states para evitar por completo el volumen generado por los intervalos de fechas.

No vuelva a intentar la misma solicitud sin modificar los parámetros. La API no devuelve resultados parciales, por lo que un nuevo intento sin modificaciones volverá a fallar.