
Cuando se trabaja con API para recuperar grandes cantidades de datos (potencialmente miles de elementos), hay varios aspectos cruciales a considerar para garantizar que el proceso sea eficiente, flexible y eficaz. A continuación se presenta un desglose de los factores clave que se deben administrar, junto con una solución para usuarios de PHP.
Consideraciones clave al recuperar grandes datos a través de API
Permítanme compartir algunas consideraciones clave para recuperar de manera eficiente grandes conjuntos de datos a través de API:
-
Manejo de la paginación: las API generalmente entregan datos en páginas. Para recuperar todos los datos, necesita administrar la paginación, realizando múltiples llamadas a la API mientras realiza un seguimiento del cursor o del número de página. Calcular la cantidad de llamadas API requeridas y administrar este proceso es esencial para garantizar que obtenga el conjunto de datos completo.
-
Administración de memoria: al recuperar grandes conjuntos de datos, cargar todo en la memoria a la vez puede saturar su sistema. Es fundamental evitar cargar todos los resultados en la memoria al mismo tiempo. En su lugar, procese los datos en fragmentos, asegurándose de que su aplicación siga respondiendo y no tenga problemas de memoria.
-
Limitación y aceleración de velocidad: muchas API imponen límites de velocidad, como restringirle a X solicitudes por segundo o Y solicitudes por minuto. Para permanecer dentro de estos límites, debes implementar un mecanismo de limitación flexible que se adapte a las restricciones específicas de la API.
-
Solicitudes API paralelas: dada la necesidad de realizar numerosas llamadas API debido a la paginación, desea recuperar datos lo más rápido posible. Una estrategia es realizar múltiples llamadas API en paralelo, respetando los límites de velocidad. Esto garantiza que sus solicitudes sean rápidas y cumplan con las restricciones de la API.
-
Recopilación de datos eficiente: a pesar de realizar numerosas solicitudes API paginadas, es necesario combinar los resultados en una sola colección, manejándolos de manera eficiente para evitar la sobrecarga de memoria. Esto garantiza un procesamiento fluido de los datos y al mismo tiempo mantiene un bajo uso de recursos.
-
Análisis JSON optimizado: muchas API devuelven datos en formato JSON. Cuando se trata de respuestas grandes, es importante acceder y consultar secciones específicas del JSON de manera eficiente, asegurando que no se carguen ni procesen datos innecesarios.
-
Manejo eficiente de excepciones: las API generalmente generan excepciones a través de códigos de estado HTTP, lo que indica problemas como tiempos de espera, acceso no autorizado o errores del servidor. Es importante manejarlos utilizando el mecanismo de excepción proporcionado por su lenguaje de programación. Más allá del manejo básico de errores, también debe asignar y generar excepciones de una manera que se alinee con la lógica de su aplicación, haciendo que el proceso de manejo de errores sea claro y manejable. La implementación de reintentos, registros y asignación de errores a excepciones significativas garantiza un proceso de recuperación de datos fluido y confiable.
La solución PHP "Lazy JSON Pages"
Si estás trabajando con PHP, estás de suerte. El paquete de código abierto Lazy JSON Pages ofrece un raspador de API conveniente e independiente del marco que puede cargar elementos de API JSON paginadas en una colección diferida de Laravel a través de solicitudes HTTP asincrónicas. Este paquete simplifica la paginación, la limitación, las solicitudes paralelas y la administración de memoria, lo que garantiza eficiencia y rendimiento.
Puedes encontrar más información sobre el paquete y más opciones para personalizarlo en el archivo Léame del repositorio oficial de GitHub: Lazy JSON Pages.
Quiero agradecer a Andrea Marco Sartori, el autor del paquete.
Ejemplo: recuperar miles de historias de Storyblok
Aquí hay un ejemplo conciso de cómo recuperar miles de historias de Storyblok usando el paquete Lazy JSON Pages en PHP.
Primero, puede crear un nuevo directorio, saltar al directorio y comenzar a instalar el paquete:
mkdir lazy-http
cd lazy-http
composer require cerbero/lazy-json-pages
Una vez instalado el paquete, puedes comenzar a crear tu script:
totalItems('total')
->async(requests: 3)
->throttle(requests: 10, perSeconds: 1)
->collect('stories.*');
foreach ($lazyCollection as $item) {
echo $item["name"] . PHP_EOL;
}
Luego puedes reemplazar tu token de acceso y ejecutar el script mediante el comando php.
como funciona
-
Paginación eficiente: los resultados de la API se paginan y la colección diferida se encarga de recuperar todas las páginas sin necesidad de almacenar todo en la memoria.
-
Llamadas API asíncronas: la línea ->async(requests: 3) activa tres solicitudes API en paralelo, mejorando el rendimiento.
-
Aceleración: la línea ->throttle(solicitudes: 10, perSeconds: 1) garantiza que no se realicen más de 10 solicitudes por segundo, respetando los límites de velocidad.
-
Eficiencia de la memoria: el uso de colecciones diferidas permite que los datos se procesen elemento por elemento, lo que reduce la sobrecarga de memoria, incluso con conjuntos de datos grandes.
Este enfoque ofrece una solución confiable, eficaz y con uso eficiente de la memoria para recuperar grandes volúmenes de datos de API en PHP.
Referencias
- El paquete Lazy JSON Pages: https://github.com/cerbero90/lazy-json-pages
- El autor del paquete de código abierto: https://github.com/cerbero90