API-vastausten ja virheiden käsittely
Tarkistakaa HTTP-tilakoodit, käsitelkää virheet ja jäsentäkää API-kuormat.
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 arrayVirhevastausten 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 stringVastausten 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?
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
- JSON:n koodaus ja purku
- HTTP-pyyntöjen tekeminen cURL:lla
- API-vastausten ja virheiden käsittely
- Yksinkertaisen API-asiakasohjelman rakentaminen