0Pricing
PHP Academy · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. JSONのエンコードとデコード
  2. cURLでHTTPリクエストを送る
  3. APIレスポンスとエラーの処理
  4. シンプルなAPIクライアントの構築
← PHP Academyに戻る