Estoy aprendiendo JavaScript (Node.js - usando la plataforma Pipedream). He estado escribiendo guiones para ayudar a automatizar algunas pequeñas tareas en mi trabajo diario.
Estoy creando uno que genera un informe sobre las interacciones recientes con los clientes.
Como parte de esto, estoy usando axios para obtener "compromisos" de la API de Hubspot (básicamente, una lista de identificadores que usaré en solicitudes posteriores).
La API devuelve respuestas paginadas. Me he encontrado con la paginación anteriormente y entiendo el principio detrás de esto, pero nunca he escrito un script para manejarlo. Esta es mi primera
Funciona. Pero siento que podría mejorarse. A continuación he comentado cómo lo he abordado.
El punto final devuelve hasta 100 valores 'por página' junto con un "hasMore":true y un valor "offset":987654321 que se puede pasar como parámetro de consulta en solicitudes posteriores (si tieneMás === verdadero).
Ejemplo de respuesta de la API:
{"results":[1234,1235,1236],"hasMore":true,"offset":987654321}Mi código:
import axios from 'axios'; //function to get each page of data async function getAssoc(req){ const options = { method: 'GET', url: `https://api.hubapi.com/${req}`, headers: { Authorization: `Bearer ${auths}`, }, }; return await axios(options); } //declare array in which to store all 'associations' const assocs = []; //store the ID that I get in an earlier step const id = vid; //declare variable in which to temporarily store each request response data var resp; //declare query parameter value, initially blank, but will be assigned a value upon subsequent iterations of do while var offset = ''; do { //make request and store response in resp variable resp = await getAssoc(`crm-associations/v1/associations/${id}/HUBSPOT_DEFINED/9?offset=${offset}`); //push the results into my 'assocs' (associations) array resp.data.results.forEach(element => assocs.push(element)); //store offset value for use in next iteration's request offset = resp.data.offset; } while (resp.data.hasMore); //hasMore will be false when there's no more records to request return assocs;Siento que podría mejorarse porque:
Gracias de antemano por su tiempo y cualquier ayuda que pueda ofrecer.