APIレスポンスとエラーの処理
HTTPステータスコードを確認し、エラーを処理してAPIのペイロードを解析します
「APIレスポンスとエラーの処理」はCoddyKit上の無料PHP Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これは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 Service Unavailableやタイムアウトなど)には、リトライ回数の上限を設けた指数バックオフを実装してください。
<?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レスポンスをキャッシュしてください。データの鮮度要件に合ったTTLを設定し、レスポンスをRedisまたはAPCuに保存します。
API呼び出しのログ記録
デバッグや本番環境でのAPIの健全性監視に役立つよう、リクエストURL、メソッド、ステータスコード、レイテンシをログに記録してください。
エラーとしてのタイムアウト
cURLのタイムアウト(CURLE_OPERATION_TIMEDOUT)はHTTPエラーではなく通信エラーです。明示的に処理してください。
SSL証明書エラー
証明書の検証失敗(CURLE_SSL_CACERT)は、サーバー証明書が信頼されていないことを意味します。CAバンドルを更新し、検証は決して無効にしないでください。
まとめ
必ず最初にcURLのerrnoを確認し、その後でHTTPステータスを確認してください。エラー本文を解析し、処理を再利用可能な関数にまとめます。一時的な障害にはリトライを実装してください。
理解度チェック
最初に確認すべきなのは、cURLのerrnoとHTTPステータスのどちらでしょうか。
よくある質問
「APIレスポンスとエラーの処理」レッスンは無料ですか?
はい。「APIレスポンスとエラーの処理」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、PHP Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 PHP Academyコースには全4レッスンが含まれています。
「APIレスポンスとエラーの処理」で何を学びますか?
HTTPステータスコードを確認し、エラーを処理してAPIのペイロードを解析します ブラウザで直接実行するハンズオンコードでPHP Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
PHP Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPHP Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「APIレスポンスとエラーの処理」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPHP Academyレッスンでコードを書いて実行できますか?
はい。すべてのPHP Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- JSONのエンコードとデコード
- cURLでHTTPリクエストを送る
- APIレスポンスとエラーの処理
- シンプルなAPIクライアントの構築