Optimierung des API-Datenabrufs im großen Maßstab: Best Practices und PHP Lazy Collection-Lösung

WBOY
Freigeben: 2024-09-12 16:18:14
Original
326 Leute haben es durchsucht

Optimizing Large-Scale API Data Retrieval: Best Practices and PHP Lazy Collection Solution

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
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

Dann können Sie Ihr Zugriffstoken ersetzen und das Skript über den PHP-Befehl ausführen.

작동 원리

  • 효율적인 페이지 매김: API 결과가 페이지 매겨지고, 게으른 컬렉션은 모든 것을 메모리에 저장할 필요 없이 모든 페이지 가져오기를 처리합니다.
  • 비동기 API 호출: ->async(requests: 3) 줄은 3개의 API 요청을 병렬로 트리거하여 성능을 향상시킵니다.
  • 제한: ->throttle(requests: 10, perSeconds: 1) 줄은 속도 제한을 준수하면서 초당 10개 이하의 요청이 이루어지도록 보장합니다.
  • 메모리 효율성: 지연 컬렉션을 사용하면 데이터를 항목별로 처리할 수 있으므로 대규모 데이터세트에서도 메모리 오버헤드가 줄어듭니다.

이 접근 방식은 PHP의 API에서 대용량 데이터를 검색하기 위한 안정적이고 성능이 뛰어나며 메모리 효율적인 솔루션을 제공합니다.

참고자료

  • Lazy JSON 페이지 패키지: https://github.com/cerbero90/lazy-json-pages
  • 오픈소스 패키지 작성자: 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!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!