PHP Academy · Lektion

Hantera API-svar och fel

Kontrollera HTTP-statuskoder, hantera fel och tolka API-nyttolaster.

Lektion 3 av 413 steg

Hantera API-svar och fel är en gratis lektion i PHP Academy på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för PHP Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i PHP Academy innehåller totalt 4 lektioner.

Kontrollera HTTP-statuskoden

Kontrollera alltid HTTP-statuskoden innan Ni bearbetar svarskroppen.

<?php
$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($statusCode !== 200) {
    throw new RuntimeException("API error: HTTP $statusCode");
}

Tolka JSON-svaret

Avkoda JSON-kroppen och hantera tolkningsfel.

<?php
$body = curl_exec($ch);
$data = json_decode($body, true, 512, JSON_THROW_ON_ERROR);
// $data is now a PHP array

Felkroppar i svar

API:er returnerar ofta feldetaljer i kroppen även för svar med statuskoderna 4xx/5xx. Tolka och logga alltid kroppen vid fel.

<?php
if ($statusCode >= 400) {
    $err = json_decode($body, true);
    $msg = $err["message"] ?? "Unknown API error";
    throw new RuntimeException("API $statusCode: $msg");
}

Transportfel i cURL

Nätverksfel (DNS-fel, tidsgränser) är separata från HTTP-fel. Kontrollera curl_errno() först och därefter HTTP-statusen.

<?php
if (curl_errno($ch)) {
    throw new RuntimeException("Transport error: ".curl_error($ch));
}

Kapsla in i en hjälpfunktion

Kapsla in konfigurering, körning och felhantering för cURL i en återanvändbar funktion.

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

Försökslogik

För tillfälliga fel (503 Service Unavailable, tidsgränser) bör Ni implementera exponentiell backoff med ett begränsat antal nya försök.

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

Headerfält för hastighetsbegränsning

Många API:er inkluderar headerfält för hastighetsbegränsning: X-RateLimit-Remaining och X-RateLimit-Reset. Läs dem för att undvika att nå gränserna.

<?php
curl_setopt($ch, CURLOPT_HEADER, true);
// Parse headers from the response string

Cachelagring av svar

Cachelagra API-svar för att undvika onödiga nätverksanrop. Lagra svaren i Redis eller APCu med en TTL som motsvarar kraven på hur färska data måste vara.

Logga API-anrop

Logga URL, metod, statuskod och svarstid för att underlätta felsökning och övervaka API:ets hälsa i produktion.

Tidsgränser som fel

En tidsgräns i cURL (CURLE_OPERATION_TIMEDOUT) är ett transportfel, inte ett HTTP-fel. Hantera den uttryckligen.

Fel på SSL-certifikat

Fel vid certifikatvalidering (CURLE_SSL_CACERT) betyder att servercertifikatet inte är betrott. Uppdatera Ert CA-paket och inaktivera aldrig verifieringen.

Sammanfattning

Kontrollera alltid cURL-errno först och därefter HTTP-statusen. Tolka felkroppar. Kapsla in logiken i återanvändbara funktioner. Implementera nya försök för tillfälliga fel.

Snabb kontroll

Vad bör Ni kontrollera först: cURL-errno eller HTTP-statusen?

Gratis att börja

Lär dig PHP med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
49
Lektioner
195

Vanliga frågor

Är lektionen ”Hantera API-svar och fel” gratis?

Ja – hela texten till ”Hantera API-svar och fel” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i PHP Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i PHP Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Hantera API-svar och fel”?

Kontrollera HTTP-statuskoder, hantera fel och tolka API-nyttolaster. Ni övar på PHP Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig PHP Academy?

Du behöver inga förkunskaper. Utbildningen i PHP Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”Hantera API-svar och fel”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här PHP Academy-lektionen?

Ja. Varje PHP Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Koda och avkoda JSON
  2. Skicka HTTP-förfrågningar med cURL
  3. Hantera API-svar och fel
  4. Bygga en enkel API-klient
← Tillbaka till PHP Academy