PHP Academy · Oppitunti

API-vastausten ja virheiden käsittely

Tarkistakaa HTTP-tilakoodit, käsitelkää virheet ja jäsentäkää API-kuormat.

Oppitunti 3/413 vaihetta

API-vastausten ja virheiden käsittely on ilmainen PHP Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu PHP Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. PHP Academy-kurssilla on yhteensä 4 oppituntia.

HTTP-tilakoodin tarkistaminen

Tarkistakaa HTTP-tilakoodi aina ennen vastausrungon käsittelyä.

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

JSON-vastauksen jäsentäminen

Purkaa JSON-runko ja käsittele jäsennysvirheet.

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

Virhevastausten rungot

API-rajapinnat palauttavat usein virheen tiedot rungossa myös 4xx/5xx-vastauksissa. Jäsentäkää ja lokittakaa runko aina virhetilanteissa.

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

cURL:n siirtovirheet

Verkkovirheet, kuten DNS-virhe ja aikakatkaisu, ovat eri asia kuin HTTP-virheet. Tarkistakaa ensin curl_errno() ja sen jälkeen HTTP-tilakoodi.

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

Aputoimintoon kääriminen

Yhdistäkää cURL:n alustaminen, suorittaminen ja virheenkäsittely uudelleenkäytettävään funktioon.

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

Uudelleenyrityslogiikka

Tilapäisiä virheitä, kuten 503 Service Unavailable -vastauksia ja aikakatkaisuja, varten toteuttakaa eksponentiaalinen viive ja rajoittakaa uudelleenyritysten määrää.

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

Nopeusrajoitusten otsakkeet

Monet API-rajapinnat sisältävät nopeusrajoitusten otsakkeita: X-RateLimit-Remaining ja X-RateLimit-Reset. Lukekaa ne, jotta ette ylitä rajoja.

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

Vastausten välimuisti

Välimuistittakaa API-vastaukset turhien verkkokutsujen välttämiseksi. Tallentakaa vastaukset Redisiin tai APCu-välimuistiin käyttämällä datan ajantasaisuusvaatimusta vastaavaa TTL-arvoa.

API-kutsujen lokitus

Lokittakaa pyynnön URL-osoite, metodi, tilakoodi ja viive virheenkorjauksen helpottamiseksi sekä API-rajapinnan toimintakunnon seuraamiseksi tuotannossa.

Aikakatkaisut virheinä

cURL:n aikakatkaisu (CURLE_OPERATION_TIMEDOUT) on siirtovirhe, ei HTTP-virhe. Käsitelkää se erikseen.

SSL-varmennevirheet

Varmenteen tarkistuksen epäonnistuminen (CURLE_SSL_CACERT) tarkoittaa, ettei palvelimen varmenteeseen luoteta. Päivittäkää CA-varmennepaketti älkääkä koskaan poistako tarkistusta käytöstä.

Yhteenveto

Tarkistakaa aina ensin cURL:n errno ja vasta sen jälkeen HTTP-tilakoodi. Jäsentäkää virherungot. Kapseloikaa logiikka uudelleenkäytettäviin funktioihin. Toteuttakaa uudelleenyritykset tilapäisiä virheitä varten.

Pikatarkistus

Kumpi pitäisi tarkistaa ensin: cURL:n errno vai HTTP-tilakoodi?

Aloita maksutta

Opi PHP tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
49
Oppitunnit
195

Usein kysytyt kysymykset

Onko oppitunti ”API-vastausten ja virheiden käsittely” ilmainen?

Kyllä – oppitunnin ”API-vastausten ja virheiden käsittely” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko PHP Academy-kurssin, päivitä CoddyKit PROhon. PHP Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”API-vastausten ja virheiden käsittely”?

Tarkistakaa HTTP-tilakoodit, käsitelkää virheet ja jäsentäkää API-kuormat. Harjoittelet PHP Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni PHP Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin PHP Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”API-vastausten ja virheiden käsittely”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä PHP Academy-oppitunnilla?

Kyllä. Jokainen PHP Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. JSON:n koodaus ja purku
  2. HTTP-pyyntöjen tekeminen cURL:lla
  3. API-vastausten ja virheiden käsittely
  4. Yksinkertaisen API-asiakasohjelman rakentaminen
← Takaisin: PHP Academy