0Pricing
PHP Academy · Lekcja

Budowanie prostego klienta API

Opakuj wywołania cURL w wielokrotnie używaną klasę klienta API w PHP

Budowanie prostego klienta API to bezpłatna lekcja PHP Academy na CoddyKit. To lekcja 4 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.

Dlaczego opakowywać cURL?

Dedykowana klasa klienta API centralizuje uwierzytelnianie, bazowy adres URL, obsługę błędów i rejestrowanie, unikając powtarzalnego kodu w całej bazie kodu.

Szkielet klasy klienta

Minimalny klient API z bazowym adresem URL i tokenem uwierzytelniającym.

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

Metody GET i POST

Należy udostępnić wygodne metody, które delegują obsługę do prywatnej metody request().

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

Korzystanie z klienta

Należy tworzyć obiekt klienta i wywoływać metody z określonymi typami zamiast używać surowego 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"]);

Parametry ciągu zapytania

Ciągi zapytań należy tworzyć za pomocą 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]);

Pomocnik do stronicowania

Należy dodać pomocnik, który automatycznie zbiera wszystkie strony stronicowanego interfejsu 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;
}

Buforowanie odpowiedzi

Należy wstrzyknąć warstwę buforowania, aby unikać zbędnych żądań.

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

Rejestrowanie

Należy dodać rejestrator PSR-3, aby zapisywać każde żądanie i odpowiedź na potrzeby debugowania.

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

Testowanie klienta

W testach jednostkowych należy zastąpić cURL atrapą modułu obsługi HTTP (np. Guzzle MockHandler), aby testy działały bez rzeczywistych wywołań sieciowych.

Guzzle jako alternatywa

W środowisku produkcyjnym warto rozważyć Guzzle (composer require guzzlehttp/guzzle), który udostępnia middleware, żądania asynchroniczne i dopracowany interfejs API.

Opcja HTTP_FOUNDATION

Symfony HttpClient (symfony/http-client) to kolejna znakomita alternatywa z przejrzystym interfejsem i pełnoprawną obsługą asynchroniczną.

Podsumowanie

Opakowanie cURL w klasę ogranicza powielanie kodu, centralizuje obsługę błędów i ułatwia testowanie. Należy udostępniać metody z określonymi typami (get, post) zamiast surowych czasowników HTTP.

Szybkie sprawdzenie

Jaka funkcja PHP tworzy ciągi zapytań URL?

Często zadawane pytania

Czy lekcja „Budowanie prostego klienta API” jest bezpłatna?

Tak — pełny tekst „Budowanie prostego klienta 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 „Budowanie prostego klienta API”?

Opakuj wywołania cURL w wielokrotnie używaną klasę klienta API w PHP Ć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 4 z 4.

Ile czasu zajmuje lekcja „Budowanie prostego klienta 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