ホーム テクノロジー 開発 PHP クライアントで API を使用する方法

PHP クライアントで API を使用する方法


このガイドでは、 API への接続に使用できるさまざまな PHP クライアントについて説明します。

具体的には、 file_get_contents関数を使用した API、Guzzle、HTTPful、および Symfony の HTTPS クライアントの使用について説明します。

API とは何ですか?

は、Web サイトのパフォーマンスを監視するために使用できる一連の無料ツールを提供します。これらのツールには、リンク切れアナライザー、読み込み時間、DNS チェッカーが含まれています。これらのツールには、Web インターフェイスまたは API を介してオンラインでアクセスできます。

API は HTTP に基づいており、HTTP クライアント ライブラリを使用して任意のプログラミング言語からアクセスできます。 API には、支払い情報を提供しなくても使用を開始できる豊富な無料枠があります。

私たちが構築しようとしているもの

コマンドラインから実行可能なスクリプトを作成します。このスクリプトは、Google Web サイトの読み込みにかかる時間を計算し、端末に出力します。さまざまな PHP HTTP クライアントを使用してこの単純なプログラムを実装し、API の使用がどのようなものかを示します。

具体的には、組み込み関数file_get_contents()php_curl 、および拡張機能 Guzzle PHP を使用します。これらの例はどんなに単純に見えても、 API の使用の中心的な概念を示しています。

前提条件

手順を進めるには、事前に PHP について理解し、コンピュータにインストールしておく必要があります。さらに、拡張機能を管理するにはComposerが必要です。

最後に、コードを記述するためのテキスト エディタも必要です。私の場合は、Microsoft の人気のあるオープンソース テキスト エディタである Visual Studio Code を使用します。これは、Visual Studio Code Web サイトからダウンロードできます。

API の概要

API には、やりたいことに応じてさまざまなエンドポイントがあります。エンドポイントの完全なリストとそれに関連するドキュメントは、ドキュメント ページにあります。

アカウントの作成

API の使用を開始するには、API ランディング ページに移動し、サインアップ ボタンをクリックしてアカウントを作成する必要があります。サインアップが完了すると、ダッシュボードに移動し、API キーが表示されます。ダッシュボードは下の写真のようになるはずです。セキュリティ上の理由から、API キーを黒塗りにしました。

-ダッシュボード-1
-ダッシュボード-1

作成するすべての API リクエストで、このキーをリクエスト ヘッダーとして指定する必要があります。これをどのように行うことができるかについては、すぐに説明します。

アカウントを作成し、PHP をインストールしたら、プロジェクトの作成を開始できます。

プロジェクトフォルダーの作成

まず、プロジェクトファイルを保存するフォルダーを作成します。その後、以下のファイルを作成します

  • .env
  • with_curl.php
  • with_file_get_contents.php
  • with_guzzle.php

その後、次のコマンドを実行して、 vlucas/phpdotenvおよびguzzlehttp/guzzle拡張機能をインストールします。

 composer require vlucas/phpdotenv guzzlehttp/guzzle

この時点で、プロジェクト フォルダーは次のようになっているはずです。

2022-10-17-10-55-35 のスクリーンショット
2022-10-17-10-55-35 のスクリーンショット

次に、 .envファイルを開き、次のコード行を追加します。 <your-api-key>を ダッシュボードの実際の API キーに置き換えます。

 API_KEY=<your-api-key>

file_get_contents() の使用

HTTP リクエストを作成するために使用できる最初の方法は、PHP に組み込まれているfile_get_contents()関数を呼び出すことです。 file_get_contents()関数の関数シグネチャは次のとおりです。

 file_get_contents(path, include_path, context)

このメソッドはローカル ストレージ内のファイルの内容を読み取るためによく使用されますが、API エンドポイントによって返されたデータなどの Web リソースを読み取るために使用することもできます。

まず、 with_file_get_contents.phpを開いて、ボイラープレート PHP コードを追加します。

 <?php
   // all the code to be inserted here
?>

次に、拡張機能の読み込みを開始できます。次のコード行をファイルに追加します

require_once('vendor/autoload.php');

次に、API キーを含む環境変数をロードできます。

 $dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();

次に、ペイロードを定義できます。これはリクエスト本文の一部として送信されるデータになります

$payload = json_encode([
    "url" => "https://www.google.com", 
    "proxyCountry" => "us",
    "followRedirect" => true
]);

ペイロード変数を作成し、 urlproxyCountry 、およびfollowRedirectプロパティとして含む JSON 文字列に割り当てました。

urlプロパティは、読み込み時間を確認する Web ページを指定します。

proxyCountry 、リクエストを行うために使用するサーバーの場所です。この場合、米国のサーバーを使用していますが、インド、中国、英国、フランスから選択できます。詳細については、ドキュメントを参照してください。

次に、 followRedirectプロキシ サーバーがリダイレクトに従い、最終応答または最初のリダイレクトの応答時間を測定するかどうかを指定します。

その後、次のコードを追加することで、リクエストを構成するオプションを作成できます。

 $options = [
    "http" => [
        "method" => "POST",
        "header" => array("Content-Type: application/json", "x-api-key : " . $_ENV['API_KEY']),
        "content" => $payload
    ] 
];

これにより、HTTP メソッドが POST であることを指定するオプション オブジェクトが作成され、コンテンツ タイプを JSON として、 x-api-keyを API キーとして指定する 2 つのプロパティを指定するヘッダーが作成されました。 .envファイルが作成され、環境変数としてロードされています。

次に、オプションが書き込まれるストリームを作成してリクエストを行うことができます。

 $context = stream_context_create($options);

次に、 file_get_contents()メソッドを呼び出してリクエストを作成し、応答を変数として保存します。

 $response = file_get_contents("https://api..com/loadtime", false, $context);

https://api..com/loadtimeにリクエストを行いました。 false は、PHP にパスを使用しないように指示します。そして、作成したコンテキストをメソッドに渡します。

応答を表示するには、次のように出力を使用します。

 echo "Loadtime: " . json_decode($response)->data->total . "\n";

これが完了すると、ファイルは次のようになります。

 <?php
    require_once('vendor/autoload.php');

    $dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
    $dotenv->load();

    $payload = json_encode([
        "url" => "https://www.google.com", 
        "proxyCountry" => "us",
        "followRedirect" => true
    ]);

    $options = [
        "http" => [
            "method" => "POST",
            "header" => array("Content-Type: application/json", "x-api-key : " . $_ENV['API_KEY']),
            "content" => $payload
        ] 
    ];

    $context = stream_context_create($options);

    $response = file_get_contents("https://api..com/loadtime", false, $context);

    echo "Loadtime: " . json_decode($response)->data->total . "\n";
?>

次のコマンドを使用してファイルを実行すると、次のようになります。

 $php with_file_get_contents.php

次の出力が得られます

Loadtime: 81

cURLの使用

cURL は、クライアント側の URL リクエストを行うために使用されるコマンド ライン ユーティリティです。 PHP では、 php-curlユーティリティを使用して使用できます。使用を開始するには、 with_curl.phpファイルを開き、ボイラープレート PHP を記述します。

 <?php
    // all new code will be written here
?>

次に、拡張機能をインポートし、 .envファイルに定義されている API_KEY 環境変数をロードします。

 require_once('vendor/autoload.php');

$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();

次に、オブジェクトのヘッダーを配列として保存する変数を作成します。配列内の個々の要素は特定のヘッダーです。

 $header = ["Content-type: application/json", "x-api-key: " . $_ENV['API_KEY']];

2 つのヘッダーを定義しました。1 つはコンテンツ タイプ用、もう 1 つは API キー用です。

次に、リクエストの本文を定義します。

 $body = json_encode([
    "url" => "google.com",
    "proxyCountry" => "us",
    "followRedirect" => true
]);

この後、 curl_init()関数を使用して、curl セッションを作成できます。リクエストを行う URL を関数呼び出しの引数として渡すことができます。

 $ch = curl_init("https://api..com/loadtime");

これで、ヘッダーと本文をセッションのオプションとして定義することで、すべてをまとめることができます。このために、 curl_setopt_array()関数を使用します。

 curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_HTTPHEADER => $header,
    CURLOPT_POSTFIELDS => $body
]);

リクエストを行うには、 curl_exec()関数を呼び出します。

 $response = curl_exec($ch);

応答を$response変数に保存したので、セッションを閉じて、セッションで使用されているシステム リソースを解放できます。

 curl_close($ch);

最後に、 var_dump使用して応答を画面に出力できます。

 var_dump($response);

最終的に、スクリプト ファイルは次のようになります。

 <?php
    require_once('vendor/autoload.php');

    $dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
    $dotenv->load();

    $header = ["Content-type: application/json", "x-api-key: " . $_ENV['API_KEY']];

    $body = json_encode([
        "url" => "google.com",
        "proxyCountry" => "us",
        "followRedirect" => true
    ]);

    $ch = curl_init("https://api..com/loadtime");

    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_HTTPHEADER => $header,
        CURLOPT_POSTFIELDS => $body
    ]);

    $response = curl_exec($ch);

    curl_close($ch);

    var_dump($response);
?>

php with_curl.phpを使用してスクリプトを実行すると、次の出力が得られるはずです。

 {"timestamp":1666083632547,"apiStatus":"success","apiCode":200,"meta":{"url":"google.com","followRedirect":true,"redirectedURL":"https://www.google.com/?gws_rd=ssl","test":{"id":"d20h1hb409qbfwm0g534l51asugpi5hl"}},"data":{"dns":12,"connect":17,"tls":6,"send":21,"wait":110,"total":114}}bool(true)

リクエストは正常に完了し、API は JSON0 データで応答しました。このデータはご自由にお使いいただけます。

ガズル付き

このチュートリアルの最後の部分では、 Guzzle を使用してスクリプトを作成します。いつものように、 with_guzzle.php内に PHP ボイラープレートを挿入することから始めます。

 <?php
    // all the code will go here
?>

次に、拡張機能、Guzzle クライアント、リクエスト オブジェクトをインポートし、環境変数をロードできます。

 require_once('vendor/autoload.php');

use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;

次に、環境変数をロードできます。

 $dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();

その後、Guzzle HTTP クライアントをインスタンス化できます。

 $client = new GuzzleHttp\Client();

次に、リクエストのヘッダーの作成に進みます。

 $headers = [
    'x-api-key' => $_ENV['API_KEY'],
    'Content-Type' => 'application/json'
];

次に、リクエストの本文を定義します。

 $body = json_encode([
    "url" => "google.com",
    "proxyCountry" => "us",
    "followRedirect" => true
]);

次に、Request クラスをインスタンス化し、API エンドポイント URL、ヘッダー、および本文を渡すことでリクエストを作成できます。

 $request = new Request('POST', 'https://api..com/loadtime', $headers, $body);

次に、次のコード行を追加してリクエストを送信します。

 $response = $client->sendAsync($request)->wait();

リクエストが送信されると、次のようにリクエストの本文を受け取ることができます。

 $response_body = $response->getBody();

最終的に、JSON 応答をデコードしてロード時間を出力できます。

 echo "Loadtime: " . json_decode($response_body)->data->total . "\n";

したがって、最終的にファイルは次のようになります。

 <?php
    require_once('vendor/autoload.php');

    use GuzzleHttp\Client;
    use GuzzleHttp\Psr7\Request;

    $dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
    $dotenv->load();
    

    $client = new GuzzleHttp\Client();

    $headers = [
        'x-api-key' => $_ENV['API_KEY'],
        'Content-Type' => 'application/json'
    ];

    $body = json_encode([
        "url" => "google.com",
        "proxyCountry" => "us",
        "followRedirect" => true
    ]);

    $request = new Request('POST', 'https://api..com/loadtime', $headers, $body);

    $response = $client->sendAsync($request)->wait();

    $response_body = $response->getBody();

    echo "Loadtime: " . json_decode($response_body)->data->total . "\n";
?>

次のコマンドを使用してスクリプトを実行すると、次のようになります。

 $php with_guzzle.php

そして、応答が表示されます。

 Loadtime: 130

結論

この記事では、 API を必要とする PHP プロジェクトを作成するときに使用する可能性があるさまざまなクライアントについて説明しました。

このプロジェクトのスクリプトは主な出力形式としてコマンド ラインを使用しますが、実際のプロジェクトでは応答を Web ページ上に表示したり、ファイルに書き込んだりできます。この記事のサンプル スクリプトはシンプルですが、 API の使用の中心的な概念を示しています。別の API を使用するには、エンドポイントを変更し、リクエスト本文で別のオプションを渡します。

Javascript で DNS Lookup API を使用する方法にも興味があるかもしれません。

「 PHP クライアントで API を使用する方法」についてわかりやすく解説!絶対に観るべきベスト2動画

【初学者向け】APIを理解したい人がまず最初に見る動画
【WebAPI入門】RESTfulなWebAPIを自作してAPIを理解しよう ~WebAPI入門~