0Pricing
PHP Academy · Урок

Обработка ответов API и ошибок

Проверяйте коды состояния HTTP, обрабатывайте ошибки и разбирайте данные API

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

Проверка кода состояния HTTP

Всегда проверяйте код состояния HTTP перед обработкой тела ответа.

<?php
$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($statusCode !== 200) {
    throw new RuntimeException("API error: HTTP $statusCode");
}

Разбор ответа JSON

Декодируйте тело JSON и обрабатывайте ошибки разбора.

<?php
$body = curl_exec($ch);
$data = json_decode($body, true, 512, JSON_THROW_ON_ERROR);
// $data is now a PHP array

Тела ответов с ошибками

API часто возвращают сведения об ошибке в теле даже для ответов 4xx/5xx. При возникновении ошибки всегда разбирайте тело и записывайте его в журнал.

<?php
if ($statusCode >= 400) {
    $err = json_decode($body, true);
    $msg = $err["message"] ?? "Unknown API error";
    throw new RuntimeException("API $statusCode: $msg");
}

Ошибки транспорта cURL

Сетевые ошибки (сбой DNS, истечение времени ожидания) отличаются от ошибок HTTP. Сначала проверяйте curl_errno(), а затем код состояния HTTP.

<?php
if (curl_errno($ch)) {
    throw new RuntimeException("Transport error: ".curl_error($ch));
}

Обертывание в вспомогательную функцию

Инкапсулируйте настройку cURL, выполнение запроса и обработку ошибок в повторно используемой функции.

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

Логика повторных попыток

Для временных ошибок (503, «Сервис недоступен», и истечения времени ожидания) реализуйте экспоненциальную задержку с ограничением числа повторных попыток.

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

Заголовки ограничения частоты запросов

Многие API включают заголовки ограничения частоты запросов: X-RateLimit-Remaining и X-RateLimit-Reset. Читайте их, чтобы не превысить ограничения.

<?php
curl_setopt($ch, CURLOPT_HEADER, true);
// Parse headers from the response string

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

Кэшируйте ответы API, чтобы избежать повторных сетевых вызовов. Храните ответы в Redis или APCu с TTL, соответствующим требованию к актуальности данных.

Журналирование вызовов API

Записывайте в журнал URL запроса, метод, код состояния и задержку, чтобы упростить отладку и отслеживать состояние API в рабочей среде.

Истечение времени ожидания как ошибка

Истечение времени ожидания cURL (CURLE_OPERATION_TIMEDOUT) — это ошибка транспорта, а не ошибка HTTP. Обрабатывайте её явно.

Ошибки сертификата SSL

Сбои проверки сертификата (CURLE_SSL_CACERT) означают, что сертификат сервера не является доверенным. Обновите пакет сертификатов CA и никогда не отключайте проверку.

Итоги

Всегда сначала проверяйте код ошибки cURL, а затем код состояния HTTP. Разбирайте тела ответов с ошибками. Оборачивайте логику в повторно используемые функции. Реализуйте повторные попытки для временных сбоев.

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

Что следует проверить сначала: код ошибки cURL или код состояния HTTP?

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

Урок «Обработка ответов API и ошибок» бесплатный?

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

Чему я научусь в уроке «Обработка ответов API и ошибок»?

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

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

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

Сколько времени занимает урок «Обработка ответов API и ошибок»?

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

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

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

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

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