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.
Wie es funktioniert
-
Effiziente Paginierung: Die API-Ergebnisse werden paginiert und die Lazy Collection übernimmt das Abrufen aller Seiten, ohne dass alles im Speicher gespeichert werden muss.
-
Asynchrone API-Aufrufe: Die Zeile ->async(requests: 3) löst drei API-Anfragen parallel aus und verbessert so die Leistung.
-
Drosselung: Die Zeile ->throttle(requests: 10, perSeconds: 1) stellt sicher, dass nicht mehr als 10 Anfragen pro Sekunde gestellt werden, wobei die Ratenbeschränkungen eingehalten werden.
-
Speichereffizienz: Durch die Verwendung von Lazy Collections können Daten Element für Element verarbeitet werden, wodurch der Speicheraufwand reduziert wird, selbst bei großen Datensätzen.
Dieser Ansatz bietet eine zuverlässige, leistungsstarke und speichereffiziente Lösung zum Abrufen großer Datenmengen von APIs in PHP.
Referenzen
- Das Lazy JSON Pages-Paket: https://github.com/cerbero90/lazy-json-pages
- Der Autor des Open-Source-Pakets: https://github.com/cerbero90
Das obige ist der detaillierte Inhalt vonOptimierung des API-Datenabrufs im großen Maßstab: Best Practices und PHP Lazy Collection-Lösung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!