Робота з великими обсягами даних, які повертаються через API, часто вимагає використання пагінації. Пагінація дозволяє завантажувати дані частинами, що не лише спрощує обробку великої кількості інформації, але й зменшує навантаження на сервер. В цій статті розглянемо, як ефективно виконувати запити до API для отримання повного набору даних, використовуючи механізм пагінації з параметром-локатором, та зберігати кожен набір даних у новий файл.
Пагінація – це процес поділу контенту на окремі сторінки з метою оптимізації завантаження та представлення даних. У контексті API, це дозволяє розбити великі набори даних на менші порції, що запитуються та обробляються послідовно. Це особливо корисно при роботі з великою кількістю інформації, оскільки дозволяє зменшити споживання пам’яті та ризик перевантаження сервера.
Деякі API використовують параметр-локатор для контролю пагінації. Цей параметр представляє собою унікальний ідентифікатор поточної “сторінки” даних. Після кожного запиту API повертає локатор для наступної порції даних. Цей механізм дозволяє клієнтському програмному забезпеченню послідовно запитувати всі дані, починаючи з першого запиту та закінчуючи тим моментом, коли локатор більше не повертається, сигналізуючи про кінець даних.
Розглянемо практичний приклад на JavaScript, який демонструє, як можна отримати всі дані через API, що використовує пагінацію з локатором, та зберегти кожну порцію даних у окремий файл.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
const fetch = require('node-fetch'); const { parse: json2csv } = require('json2csv'); const fs = require('fs'); async function fetchData(token) { let locator; let iteration = 0; do { const requestOptions = { method: "GET", headers: { "Content-Type": 'application/json', "Accept": "text/csv", "Authorization": `Bearer ${token}` }, redirect: "follow" }; const url = locator ? `https://api.example.com/data?locator=${locator}` : "https://api.example.com/data?initial=true"; const response = await fetch(url, requestOptions); const data = await response.text(); locator = response.headers.get('locator'); if (data) { await saveDataToFile(data, ++iteration); } } while (locator); } async function saveDataToFile(data, fileNumber) { const filename = `data_part_${fileNumber}.csv`; fs.writeFileSync(filename, data); console.log(`Saved ${filename}`); } // Використання: fetchData('your_access_token_here'); |
У цьому прикладі використовується бібліотека node-fetch
для виконання HTTP-запитів та fs
для збереження даних у файловій системі. Після кожного успішного запиту до API дані зберігаються у новий файл. Цикл продовжується, поки від API не повернеться відповідь без локатора, що вказує на завершення набору даних.
Робота з API, які використовують пагінацію через параметр-локатор, може здатися складною на перший погляд. Однак, розуміння основних принципів та використання асинхронного програмування на JavaScript дозволяє ефективно отримувати великі обсяги даних та зберігати їх у структурованому форматі. Важливо пам’ятати про обмеження API, такі як ліміти на кількість запитів за певний час, та відповідально використовувати ресурси сервера.