0Pricing
PHP Academy · レッスン

シンプルなAPIクライアントの構築

cURL呼び出しを再利用可能なPHP APIクライアントクラスにまとめます

「シンプルなAPIクライアントの構築」はCoddyKit上の無料PHP Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPHP Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 PHP Academyコースには全4レッスンが含まれています。

cURLをラップする理由

専用のAPIクライアントクラスに認証、ベースURL、エラー処理、ログ記録を集約すると、コードベース全体で同じ定型処理を繰り返さずに済みます。

クライアントクラスの基本構成

ベースURLと認証トークンを持つ最小限のAPIクライアントです。

<?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メソッド

privateな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

本番環境では、ミドルウェア、非同期リクエスト、洗練されたAPIを提供するGuzzle(composer require guzzlehttp/guzzle)も検討してください。

HTTP_FOUNDATIONオプション

Symfony HttpClient(symfony/http-client)も、簡潔なインターフェースと充実した非同期サポートを備えた優れた代替手段です。

まとめ

cURLをクラスでラップすると、重複を減らし、エラー処理を集約でき、テストも容易になります。raw HTTP動詞の代わりに、型付きメソッド(get、post)を公開してください。

理解度チェック

URLのクエリ文字列を組み立てるPHP関数はどれでしょうか。

よくある質問

「シンプルなAPIクライアントの構築」レッスンは無料ですか?

はい。「シンプルなAPIクライアントの構築」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、PHP Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 PHP Academyコースには全4レッスンが含まれています。

「シンプルなAPIクライアントの構築」で何を学びますか?

cURL呼び出しを再利用可能なPHP APIクライアントクラスにまとめます ブラウザで直接実行するハンズオンコードでPHP Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

PHP Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPHP Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「シンプルなAPIクライアントの構築」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPHP Academyレッスンでコードを書いて実行できますか?

はい。すべてのPHP Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

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

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