首頁 >後端開發 >php教程 >優化大規模 API 資料檢索:最佳實踐和 PHP 延遲收集解決方案

優化大規模 API 資料檢索:最佳實踐和 PHP 延遲收集解決方案

WBOY
WBOY原創
2024-09-12 16:18:14465瀏覽

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

使用 API 檢索大量資料(可能是數千個專案)時,需要考慮幾個關鍵方面,以確保流程高效、靈活且高效能。以下是需要管理的關鍵因素的細分,以及針對 PHP 使用者的解決方案。

透過 API 檢索大數據時的關鍵注意事項

讓我分享一些透過 API 高效檢索大型資料集的關鍵注意事項:

  • 處理分頁:API 通常在頁面中傳遞資料。要檢索所有數據,您需要管理分頁,執行多個 API 呼叫,同時追蹤遊標或頁碼。計算所需的 API 呼叫數量並管理此過程對於確保您獲得完整的資料集至關重要。
  • 記憶體管理:取得大型資料集時,一次將所有內容載入記憶體可能會壓垮您的系統。避免同時將所有結果載入記憶體至關重要。相反,以區塊的形式處理數據,確保您的應用程式保持響應並且不會遇到記憶體問題。
  • 速率限制和節流:許多 API 都會施加速率限制,例如限制每秒 X 個請求或每分鐘 Y 個請求。為了保持在這些限制之內,您必須實現靈活的限制機制,以適應 API 的特定限制。
  • 並行 API 請求:考慮到分頁需要執行大量 API 呼叫,您希望盡快檢索資料。一種策略是並行進行多個 API 調用,同時遵守速率限制。這可確保您的請求既快速又符合 API 限制。
  • 高效的資料收集:儘管發出了大量分頁 API 請求,您仍然需要將結果合併到一個集合中,有效地處理它們以避免記憶體過載。這確保了數據的順利處理,同時保持較低的資源使用率。
  • 最佳化 JSON 解析:許多 API 以 JSON 格式傳回資料。處理大型回應時,以高效能方式存取和查詢 JSON 的特定部分非常重要,確保不會載入或處理不必要的資料。
  • 高效率的異常處理:API 通常透過 HTTP 狀態碼引發異常,指示逾時、未經授權的存取或伺服器錯誤等問題。使用程式語言提供的異常機制來處理這些問題非常重要。除了基本的錯誤處理之外,您還應該以與應用程式邏輯一致的方式映射和引發異常,從而使錯誤處理過程清晰且易於管理。實作重試、記錄並將錯誤對應到有意義的異常可確保資料檢索過程順利可靠。

“惰性 JSON 頁面”PHP 解決方案

如果您正在使用 PHP,那麼您很幸運。 Lazy JSON Pages 開源套件提供了一個方便的、與框架無關的 API 抓取器,可以透過非同步 HTTP 要求將分頁 JSON API 中的項目載入到 Laravel 惰性集合中。該套件簡化了分頁、限制、並行請求和記憶體管理,確保效率和效能。

您可以在官方 GitHub 存儲庫的自述文件中找到有關該包的更多信息,以及用於自定義它的更多選項:Lazy JSON Pages。

我想對軟體包的作者 Andrea Marco Sartori 表示感謝。

範例:從 Storyblok 檢索數千個故事

這是使用 PHP 中的 Lazy JSON Pages 套件從 Storyblok 檢索數千個故事的簡明範例。
首先,您可以建立一個新目錄,跳到該目錄並開始安裝套件:

mkdir lazy-http
cd lazy-http
composer require cerbero/lazy-json-pages

安裝套件後,您可以開始建立腳本:

<?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;
}

然後您可以替換您的存取令牌,並透過 php 命令執行腳本。

它是如何運作的

  • 高效分頁:API 結果分頁,惰性集合處理取得所有頁面,而不需要將所有內容儲存在記憶體中。
  • 非同步 API 呼叫:->async(requests: 3) 行並行觸發三個 API 請求,從而提高效能。
  • 限制: ->throttle(requests: 10, perSeconds: 1) 行確保每秒發出的請求不超過 10 個,遵守速率限制。
  • 記憶體效率:使用惰性集合可以逐項處理數據,減少記憶體開銷,即使對於大型數據集也是如此。

這種方法提供了可靠、高效能且記憶體高效的解決方案,用於從 PHP 中的 API 檢索大量資料。

參考

  • Lazy JSON Pages 套件:https://github.com/cerbero90/lazy-json-pages
  • 開源套件作者:https://github.com/cerbero90

以上是優化大規模 API 資料檢索:最佳實踐和 PHP 延遲收集解決方案的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn