Bei der Arbeit mit APIs zum Abrufen großer Datenmengen – möglicherweise Tausender Elemente – müssen mehrere entscheidende Aspekte berücksichtigt werden, um sicherzustellen, dass der Prozess effizient, flexibel und leistungsfähig ist. Hier finden Sie eine Aufschlüsselung der wichtigsten zu verwaltenden Faktoren sowie eine Lösung für PHP-Benutzer.
Wichtige Überlegungen beim Abrufen großer Datenmengen über die API
Lassen Sie mich einige wichtige Überlegungen zum effizienten Abrufen großer Datensätze über die API mitteilen:
-
Handhabung der Paginierung: APIs liefern Daten normalerweise in Seiten. Um alle Daten abzurufen, müssen Sie die Paginierung verwalten, mehrere API-Aufrufe durchführen und dabei den Cursor oder die Seitennummer im Auge behalten. Die Berechnung der Anzahl der erforderlichen API-Aufrufe und die Verwaltung dieses Prozesses sind wichtig, um sicherzustellen, dass Sie den vollständigen Datensatz erhalten.
-
Speicherverwaltung: Beim Abrufen großer Datensätze kann das gleichzeitige Laden aller Daten in den Speicher Ihr System überfordern. Es ist wichtig zu vermeiden, dass alle Ergebnisse gleichzeitig in den Speicher geladen werden. Verarbeiten Sie Daten stattdessen in Blöcken, um sicherzustellen, dass Ihre Anwendung reaktionsfähig bleibt und keine Speicherprobleme auftreten.
-
Ratenbegrenzung und Drosselung: Viele APIs legen Ratenbegrenzungen fest, z. B. die Beschränkung auf X Anfragen pro Sekunde oder Y Anfragen pro Minute. Um innerhalb dieser Grenzen zu bleiben, müssen Sie einen flexiblen Drosselungsmechanismus implementieren, der sich an die spezifischen Einschränkungen der API anpasst.
-
Parallele API-Anfragen: Da aufgrund der Paginierung zahlreiche API-Aufrufe durchgeführt werden müssen, möchten Sie Daten so schnell wie möglich abrufen. Eine Strategie besteht darin, mehrere API-Aufrufe parallel durchzuführen und dabei die Ratenbeschränkungen einzuhalten. Dadurch wird sichergestellt, dass Ihre Anfragen schnell sind und den API-Einschränkungen entsprechen.
-
Effiziente Datenerfassung: Trotz zahlreicher paginierter API-Anfragen müssen Sie die Ergebnisse in einer einzigen Sammlung zusammenfassen und sie effizient verarbeiten, um eine Speicherüberlastung zu vermeiden. Dies gewährleistet eine reibungslose Verarbeitung der Daten bei gleichzeitig geringem Ressourcenverbrauch.
-
Optimiertes JSON-Parsing: Viele APIs geben Daten im JSON-Format zurück. Beim Umgang mit großen Antworten ist es wichtig, auf bestimmte Abschnitte des JSON zuzugreifen und diese abzufragen, um sicherzustellen, dass unnötige Daten nicht geladen oder verarbeitet werden.
-
Effiziente Ausnahmebehandlung: APIs lösen normalerweise Ausnahmen über HTTP-Statuscodes aus, die auf Probleme wie Zeitüberschreitungen, unbefugten Zugriff oder Serverfehler hinweisen. Es ist wichtig, diese mithilfe des von Ihrer Programmiersprache bereitgestellten Ausnahmemechanismus zu behandeln. Über die grundlegende Fehlerbehandlung hinaus sollten Sie Ausnahmen auch so zuordnen und auslösen, dass sie mit der Logik Ihrer Anwendung übereinstimmen und den Fehlerbehandlungsprozess klar und überschaubar machen. Durch die Implementierung von Wiederholungsversuchen, Protokollierung und Zuordnung von Fehlern zu sinnvollen Ausnahmen wird ein reibungsloser und zuverlässiger Datenabrufprozess gewährleistet.
Die PHP-Lösung „Lazy JSON Pages“.
Wenn Sie mit PHP arbeiten, haben Sie Glück. Das Open-Source-Paket Lazy JSON Pages bietet einen praktischen, Framework-unabhängigen API-Scraper, der Elemente aus paginierten JSON-APIs über asynchrone HTTP-Anfragen in eine Laravel-Lazy-Sammlung laden kann. Dieses Paket vereinfacht Paginierung, Drosselung, parallele Anforderungen und Speicherverwaltung und sorgt so für Effizienz und Leistung.
Weitere Informationen zum Paket und weitere Optionen zum Anpassen finden Sie in der Readme-Datei des offiziellen GitHub-Repositorys: Lazy JSON Pages.
Ich möchte Andrea Marco Sartori, dem Autor des Pakets, danken.
Beispiel: Abrufen von Tausenden von Geschichten aus Storyblok
Hier ist ein prägnantes Beispiel für das Abrufen Tausender Geschichten von Storyblok mithilfe des Lazy JSON Pages-Pakets in PHP.
Zuerst können Sie ein neues Verzeichnis erstellen, in das Verzeichnis springen und mit der Installation des Pakets beginnen:
mkdir lazy-http
cd lazy-http
composer require cerbero/lazy-json-pages
Sobald das Paket installiert ist, können Sie mit der Erstellung Ihres Skripts beginnen:
<?php
require "./vendor/autoload.php";
use Illuminate\Support\LazyCollection;
$token = "your-storyblok-access-token";
$version = "draft"; // draft or published
$source = "https://api.storyblok.com/v2/cdn/stories?token=" . $token . "&version=" . $version;
$lazyCollection = LazyCollection::fromJsonPages($source)
->totalItems('total')
->async(requests: 3)
->throttle(requests: 10, perSeconds: 1)
->collect('stories.*');
foreach ($lazyCollection as $item) {
echo $item["name"] . PHP_EOL;
}
Dann können Sie Ihr Zugriffstoken ersetzen und das Skript über den PHP-Befehl ausführen.
Bagaimana ia berfungsi
-
Penomboran yang cekap: hasil API dinomborkan dan koleksi malas mengendalikan pengambilan semua halaman tanpa perlu menyimpan segala-galanya dalam ingatan.
-
Panggilan Async API: baris ->async(requests: 3) mencetuskan tiga permintaan API secara selari, meningkatkan prestasi.
-
Pendikit: baris ->pendikit(permintaan: 10, perSecond: 1) memastikan bahawa tidak lebih daripada 10 permintaan dibuat sesaat, mematuhi had kadar.
-
Kecekapan memori: Penggunaan pengumpulan malas membolehkan data diproses item demi item, mengurangkan overhed memori, walaupun dengan set data yang besar.
Pendekatan ini menawarkan penyelesaian yang boleh dipercayai, berprestasi dan cekap memori untuk mendapatkan semula volum besar data daripada API dalam PHP.
Rujukan
- Pakej Lazy JSON Pages: https://github.com/cerbero90/lazy-json-pages
- Pengarang pakej sumber terbuka: https://github.com/cerbero90
Atas ialah kandungan terperinci Mengoptimumkan Pendapatan Data API Berskala Besar: Amalan Terbaik dan Penyelesaian Pengumpulan Lazy PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!