Obsługa odpowiedzi i błędów API
Sprawdzaj kody statusu HTTP, obsługuj błędy i analizuj dane odpowiedzi API
Obsługa odpowiedzi i błędów API to bezpłatna lekcja PHP Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej PHP Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs PHP Academy zawiera 4 lekcji w sumie.
Sprawdzanie kodu statusu HTTP
Przed przetworzeniem treści odpowiedzi należy zawsze sprawdzić kod statusu HTTP.
<?php
$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($statusCode !== 200) {
throw new RuntimeException("API error: HTTP $statusCode");
}Parsowanie odpowiedzi JSON
Należy zdekodować treść JSON i obsłużyć błędy parsowania.
<?php
$body = curl_exec($ch);
$data = json_decode($body, true, 512, JSON_THROW_ON_ERROR);
// $data is now a PHP arrayTreści odpowiedzi z błędami
Interfejsy API często zwracają szczegóły błędu w treści odpowiedzi, nawet w przypadku odpowiedzi 4xx/5xx. W razie błędu należy zawsze sparsować i zarejestrować treść odpowiedzi.
<?php
if ($statusCode >= 400) {
$err = json_decode($body, true);
$msg = $err["message"] ?? "Unknown API error";
throw new RuntimeException("API $statusCode: $msg");
}Błędy transportu cURL
Błędy sieciowe (niepowodzenie DNS, przekroczenie limitu czasu) różnią się od błędów HTTP. Najpierw należy sprawdzić curl_errno(), a następnie status HTTP.
<?php
if (curl_errno($ch)) {
throw new RuntimeException("Transport error: ".curl_error($ch));
}Opakowanie w funkcję pomocniczą
Należy zamknąć konfigurację, wykonanie i obsługę błędów cURL w wielokrotnie używanej funkcji.
<?php
function httpGet(string $url, string $token): array {
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer $token"],
CURLOPT_TIMEOUT => 15,
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$errno = curl_errno($ch);
curl_close($ch);
if ($errno) throw new RuntimeException(curl_strerror($errno));
if ($status >= 400) throw new RuntimeException("HTTP $status");
return json_decode($body, true, 512, JSON_THROW_ON_ERROR);
}Logika ponawiania
W przypadku przejściowych błędów (503 Service Unavailable, przekroczenia limitu czasu) należy zastosować wykładnicze zwiększanie odstępów między próbami wraz z limitem ponowień.
<?php
$maxRetries = 3;
for ($attempt = 0; $attempt < $maxRetries; $attempt++) {
try {
$data = httpGet($url, $token);
break;
} catch (RuntimeException $e) {
if ($attempt === $maxRetries - 1) throw $e;
sleep(2 ** $attempt);
}
}Nagłówki ograniczania liczby żądań
Wiele interfejsów API zawiera nagłówki informujące o limitach: X-RateLimit-Remaining i X-RateLimit-Reset. Należy je odczytywać, aby uniknąć przekroczenia limitów.
<?php
curl_setopt($ch, CURLOPT_HEADER, true);
// Parse headers from the response stringBuforowanie odpowiedzi
Należy buforować odpowiedzi API, aby unikać zbędnych wywołań sieciowych. Odpowiedzi można przechowywać w Redisie lub APCu z TTL odpowiadającym wymaganiom dotyczącym aktualności danych.
Rejestrowanie wywołań API
Należy rejestrować adres URL żądania, metodę, kod statusu i opóźnienie, aby ułatwić debugowanie oraz monitorować działanie API w środowisku produkcyjnym.
Przekroczenia limitu czasu jako błędy
Przekroczenie limitu czasu cURL (CURLE_OPERATION_TIMEDOUT) jest błędem transportu, a nie błędem HTTP. Należy obsługiwać je jawnie.
Błędy certyfikatu SSL
Niepowodzenia weryfikacji certyfikatu (CURLE_SSL_CACERT) oznaczają, że certyfikat serwera nie jest zaufany. Należy zaktualizować pakiet CA, a nigdy nie wyłączać weryfikacji.
Podsumowanie
Należy zawsze najpierw sprawdzić errno cURL, a następnie status HTTP. Trzeba parsować treści odpowiedzi z błędami. Logikę należy umieszczać w wielokrotnie używanych funkcjach. W przypadku przejściowych błędów należy wdrożyć ponawianie prób.
Szybkie sprawdzenie
Co należy sprawdzić najpierw: errno cURL czy status HTTP?
Często zadawane pytania
Czy lekcja „Obsługa odpowiedzi i błędów API” jest bezpłatna?
Tak — pełny tekst „Obsługa odpowiedzi i błędów API” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu PHP Academy, przejdź na CoddyKit PRO. Kurs PHP Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Obsługa odpowiedzi i błędów API”?
Sprawdzaj kody statusu HTTP, obsługuj błędy i analizuj dane odpowiedzi API Ćwiczysz PHP Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć PHP Academy?
Nie wymagamy żadnego doświadczenia. PHP Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Obsługa odpowiedzi i błędów API”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji PHP Academy?
Tak. Każda lekcja PHP Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Kodowanie i dekodowanie JSON
- Wysyłanie żądań HTTP za pomocą cURL
- Obsługa odpowiedzi i błędów API
- Budowanie prostego klienta API