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
- Kodowanie i dekodowanie JSON
- Wysyłanie żądań HTTP za pomocą cURL
- Obsługa odpowiedzi i błędów API
- Budowanie prostego klienta API