PHP Academy · Lektion

Opbygning af en enkel API-klient

Indkapsl cURL-kald i en genanvendelig PHP API-klientklasse.

Lektion 4 af 413 trin

Opbygning af en enkel API-klient er en gratis PHP Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i PHP Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. PHP Academy-kurset indeholder 4 lektioner i alt.

Hvorfor indkapsle cURL?

En dedikeret API-klientklasse samler godkendelse, basis-URL, fejlhåndtering og logning ét sted — og undgår gentagen standardkode i hele kodebasen.

Grundskelet til klientklasse

En minimal API-klient med en basis-URL og et godkendelsestoken.

<?php
class ApiClient {
    public function __construct(
        private string $baseUrl,
        private string $token
    ) {}

    private function request(string $method, string $path, array $data = []): array {
        $ch = curl_init($this->baseUrl.$path);
        curl_setopt_array($ch, [
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_CUSTOMREQUEST  => $method,
            CURLOPT_HTTPHEADER     => [
                "Authorization: Bearer ".$this->token,
                "Content-Type: application/json",
                "Accept: application/json",
            ],
        ]);
        if (!empty($data)) {
            curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
        }
        $body   = curl_exec($ch);
        $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);
        if ($status >= 400) throw new RuntimeException("API error $status: $body");
        return json_decode($body, true, 512, JSON_THROW_ON_ERROR);
    }
}

GET- og POST-metoder

Eksponér bekvemmelighedsmetoder, der videredelegerer til den private request()-metode.

<?php
public function get(string $path): array {
    return $this->request("GET", $path);
}

public function post(string $path, array $body): array {
    return $this->request("POST", $path, $body);
}

Brug af klienten

Opret en instans, og kald typede metoder i stedet for direkte cURL.

<?php
$client = new ApiClient("https://api.example.com", $apiToken);
$users  = $client->get("/v1/users");
$user   = $client->post("/v1/users", ["name" => "Alice", "email" => "alice@example.com"]);

Parametre i forespørgselsstrenge

Opbyg forespørgselsstrenge med http_build_query().

<?php
public function get(string $path, array $params = []): array {
    $qs = $params ? "?".http_build_query($params) : "";
    return $this->request("GET", $path.$qs);
}
// Usage:
$users = $client->get("/v1/users", ["page" => 1, "limit" => 20]);

Hjælpefunktion til sideinddeling

Tilføj en hjælpefunktion, der automatisk henter alle sider fra en sideinddelt API.

<?php
public function paginate(string $path): array {
    $all  = [];
    $page = 1;
    do {
        $res  = $this->get($path, ["page" => $page++]);
        $all  = array_merge($all, $res["data"]);
    } while ($res["has_more"] ?? false);
    return $all;
}

Midlertidig lagring af svar

Indsprøjt et cachelag for at undgå overflødige anmodninger.

<?php
public function getCached(string $path, int $ttl = 60): array {
    $key = "api:".md5($path);
    if (apcu_exists($key)) return apcu_fetch($key);
    $data = $this->get($path);
    apcu_store($key, $data, $ttl);
    return $data;
}

Logning

Tilføj en PSR-3-logfører, der registrerer hver anmodning og hvert svar til fejlfinding.

<?php
public function __construct(
    private string $baseUrl,
    private string $token,
    private ?\Psr\Log\LoggerInterface $logger = null
) {}

Test af klienten

I enhedstest skal du erstatte cURL med en simuleret HTTP-håndtering (f.eks. Guzzle MockHandler), så testene kan køre uden rigtige netværkskald.

Guzzle som alternativ

Til produktionsbrug kan du overveje Guzzle (composer require guzzlehttp/guzzle), som leverer mellemlag, asynkrone anmodninger og et gennemarbejdet API.

HTTP_FOUNDATION-indstilling

Symfony HttpClient (symfony/http-client) er endnu et fremragende alternativ med en ren grænseflade og førsteklasses understøttelse af asynkron kommunikation.

Opsummering

Indkapsling af cURL i en klasse reducerer gentagelser, samler fejlhåndteringen ét sted og gør testning lettere. Eksponér typede metoder (get, post) frem for direkte HTTP-metoder.

Hurtigt tjek

Hvilken PHP-funktion opbygger URL-forespørgselsstrenge?

Gratis at komme i gang

Lær PHP med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
49
Lektioner
195

Ofte stillede spørgsmål

Er lektionen “Opbygning af en enkel API-klient” gratis?

Ja — hele teksten til “Opbygning af en enkel API-klient” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af PHP Academy-kurset, skal du opgradere til CoddyKit PRO. PHP Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Opbygning af en enkel API-klient”?

Indkapsl cURL-kald i en genanvendelig PHP API-klientklasse. Du øver dig i PHP Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på PHP Academy?

Der kræves ingen tidligere erfaring. PHP Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “Opbygning af en enkel API-klient”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne PHP Academy-lektion?

Ja. Alle PHP Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. JSON-kodning og -afkodning
  2. HTTP-forespørgsler med cURL
  3. Håndtering af API-svar og fejl
  4. Opbygning af en enkel API-klient
← Tilbage til PHP Academy