0Pricing
PHP Academy · Урок

Создание простого клиента API

Оборачивайте вызовы cURL в повторно используемый класс клиента API на PHP

«Создание простого клиента API» — бесплатный урок PHP Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения PHP Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс PHP Academy содержит 4 уроков всего.

Зачем оборачивать cURL?

Выделенный класс клиента API объединяет аутентификацию, базовый URL, обработку ошибок и журналирование, избавляя кодовую базу от повторяющегося шаблонного кода.

Каркас класса клиента

Минимальный клиент API с базовым URL и токеном аутентификации.

<?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 и POST

Предоставьте удобные методы, делегирующие работу закрытому методу 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);
}

Использование клиента

Создавайте экземпляр клиента и вызывайте типизированные методы вместо непосредственной работы с 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"]);

Параметры строки запроса

Создавайте строки запросов с помощью 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]);

Вспомогательная функция для разбиения на страницы

Добавьте вспомогательную функцию, которая автоматически собирает все страницы постранично разбитого ответа 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;
}

Кэширование ответов

Внедрите слой кэширования, чтобы избежать повторных запросов.

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

Журналирование

Добавьте средство журналирования PSR-3, чтобы записывать каждый запрос и ответ для отладки.

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

Тестирование клиента

В модульных тестах заменяйте cURL имитатором обработчика HTTP (например, Guzzle MockHandler), чтобы тесты выполнялись без настоящих сетевых вызовов.

Guzzle как альтернатива

Для использования в рабочей среде рассмотрите Guzzle (composer require guzzlehttp/guzzle): он предоставляет промежуточное программное обеспечение, асинхронные запросы и продуманный интерфейс.

Параметр HTTP_FOUNDATION

Symfony HttpClient (symfony/http-client) — ещё одна отличная альтернатива с понятным интерфейсом и полноценной поддержкой асинхронных операций.

Итоги

Оборачивание cURL в класс уменьшает дублирование, объединяет обработку ошибок и упрощает тестирование. Предоставляйте типизированные методы (get, post) вместо непосредственного использования глаголов HTTP.

Быстрая проверка

Какая функция PHP создаёт строки запросов URL?

Часто задаваемые вопросы

Урок «Создание простого клиента API» бесплатный?

Да — полный текст урока «Создание простого клиента API» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс PHP Academy, подпишись на CoddyKit PRO. Курс PHP Academy содержит 4 уроков всего.

Чему я научусь в уроке «Создание простого клиента API»?

Оборачивайте вызовы cURL в повторно используемый класс клиента API на PHP Ты практикуешь PHP Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать PHP Academy?

Предыдущий опыт не требуется. PHP Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Создание простого клиента API»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке PHP Academy?

Да. Каждый урок PHP Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Кодирование и декодирование JSON
  2. HTTP-запросы с помощью cURL
  3. Обработка ответов API и ошибок
  4. Создание простого клиента API
← Назад к PHP Academy