Обработка ответов 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 — локальная установка не требуется.
Все уроки этого курса
- Кодирование и декодирование JSON
- HTTP-запросы с помощью cURL
- Обработка ответов API и ошибок
- Создание простого клиента API