Integracja ERP ze sklepem przez REST API działała coraz wolniej. Pobieranie listy zamówień przez API trwało 45 sekund. Endpoint zwracał całą historię zamówień zamiast tych z ostatnich 24 godzin. Czas naprawy: 3 godziny.
Objawy
- GET
/rest/V1/orderstrwa powyżej 30 sekund - Odpowiedź JSON ma rozmiar 50MB+
- Integracja ERP timeoutuje
- Serwer MySQL przeciążony podczas wywołań API
Przyczyna
Zapytanie API bez filtra daty i bez limitu pageSize pobierało wszystkie zamówienia z historii sklepu. 500 000 rekordów serializowanych do JSON = 50MB odpowiedzi, 45 sekund przetwarzania.
Rozwiązanie
# Zawsze używaj filtrów i pageSize
# Przed (bez filtrów - ładuje WSZYSTKO):
GET /rest/V1/orders
# Po (z filtrami i paginacją):
GET /rest/V1/orders?searchCriteria[filter_groups][0][filters][0][field]=created_at
&searchCriteria[filter_groups][0][filters][0][value]=2026-07-24T00:00:00
&searchCriteria[filter_groups][0][filters][0][condition_type]=gteq
&searchCriteria[filter_groups][1][filters][0][field]=status
&searchCriteria[filter_groups][1][filters][0][value]=pending
&searchCriteria[pageSize]=100
&searchCriteria[currentPage]=1
<?php
// PHP client - poprawne użycie searchCriteria
$searchCriteria = $this->searchCriteriaBuilder
->addFilter('created_at', date('Y-m-d', strtotime('-24 hours')), 'gteq')
->addFilter('status', ['pending', 'processing'], 'in')
->setPageSize(100)
->setCurrentPage(1)
->create();
$orders = $this->orderRepository->getList($searchCriteria);
// Iteruj przez strony jeśli jest więcej wyników
$totalPages = ceil($orders->getTotalCount() / 100);
for ($page = 2; $page <= $totalPages; $page++) {
$searchCriteria->setCurrentPage($page);
$nextPage = $this->orderRepository->getList($searchCriteria);
// przetwórz $nextPage->getItems()
}
Wnioski
Każde zapytanie do REST API Magento musi mieć pageSize i filtry. Brak pageSize = ładowanie całej tabeli. Monitoruj rozmiar odpowiedzi API – jeśli przekracza 1MB to sygnał że coś jest nie tak z filtrowaniem.
