0Pricing
PHP Academy · Lekcja

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 array

Treś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 string

Buforowanie 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

  1. Kodowanie i dekodowanie JSON
  2. Wysyłanie żądań HTTP za pomocą cURL
  3. Obsługa odpowiedzi i błędów API
  4. Budowanie prostego klienta API
← Powrót do PHP Academy