APIの利用

前章では、基本的な ajax メソッドの使い方を学びました。

続いて、単なるテキストファイルを読み込むのではなく PHP で作成した簡単な Web アプリケーションに対してリクエストを送ってみましょう。

今回は、

  • number という名前で GET 送信した値を受け取る
  • 1から number までを合計した値を送り返す

というシンプルな Web アプリケーションを作成します。

シンプルな API の作成

サンプル htdocs/api/api_sample.php を作成しましょう。

htdocs/api/api_sample.php

<?php
// GETで送信された値の受け取り
$number = 0;
if(isset($_GET['number']) === true){
    $number = $_GET['number'];
}

// 1からnumberまでの合計を計算
$sum = 0;
for($i = 1; $i <= $number; $i++){
    $sum += $i;
}

echo $sum;

これで API は完成です。

続いて ajax でリクエストを送る側の html を作成しましょう。

以下のサンプル htdocs/api/use_api.php を作成して実行します。

htdocs/api/use_api.php

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>ajaxのサンプル</title>
</head>
<body>
    <h1>ajaxのサンプル</h1>
    1から<input type="number" id="number">までの合計
    <button id="send">ajaxでリクエスト送信</button>
    <p id="box">ここに受け取ったテキストが入ります。</p>
    <script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
    <script>
        // button#sendがクリックされた時に
        $('#send').on('click', () => {
            // ajaxでリクエストを送信
            $.ajax({
                url: 'api_sample.php',
                // GET送信する値を指定
                data: {
                number: $('#number').val()
                }
            }).done((res) => {
                // リクエストが成功したときの処理
                $('#box').html(res);
            }).fail(() => {
                alert('エラーです');
            });
        });
    </script>
</body>
</html>

これで、1から任意の値までの合計を計算する Web API と、それを ajax で呼び出す仕組みが完成しました。

APIの仕組み

今回の API は GET で受け取った値を利用して処理を行います。

今回はシンプルに for 文で1から受け取った値までの合計を計算しています。

レスポンスとして返す値は、単にテキストを返すのであればその文字列を echo するだけで完了です。

ajax でのリクエスト送信

今回のリクエスト送信では

// ajaxでリクエストを送信
$.ajax({
    url: 'api_sample.php',
    // GET送信する値を指定
    data: {
        number: $('#number').val()
    }
}).done((res) => {
    // リクエストが成功したときの処理
    $('#box').html(res);
}).fail(() =>{
    alert('エラーです');
});

上記のように data 属性を利用して number の値を送信しています。

また number の値については

$('#number').val()

とすることで、id="number" と設定されている input 要素の入力値を取得しています。

json の返却

上記のサンプルを改良して api では json と呼ばれる javascript のオブジェクト配列をレスポンスするようにしてみましょう。

まず、htdocs/api/api_sample.php を書き換えます。

htdocs/api/api_sample.php

<?php
$number = 0;
if(isset($_GET['number']) === true){
    $number = $_GET['number'];
}

$sum = 0;
for($i = 1; $i <= $number; $i++){
    $sum += $i;
}

echo json_encode([
    'sum' => $sum,
    'start' => 1,
    'max' => $number
]);

出力値が配列になり、さらに json_encode 関数が適用されています。

このようにすることで JSON データと呼ばれる JavaScript 側でオブジェクトやオブジェクトの配列として読み込まれるデータが作成されます。

続いて html 側も一部書き換えましょう。

htdocs/api/use_api.php

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>ajaxのサンプル</title>
</head>
<body>
    <h1>ajaxのサンプル</h1>
    1から<input type="number" id="number">までの合計
    <button id="send">ajaxでリクエスト送信</button>
    <p id="box">ここに受け取ったテキストが入ります。</p>
    <script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
    <script>
        $(function(){
            // button#sendがクリックされた時に
            $('#send').on('click', () => {
                // ajaxでリクエストを送信
                $.ajax({
                    url: 'api_sample.php',
                    // GET送信する値を指定
                    data: {
                        number: $('#number').val()
                    },
                    // レスポンスのデータ形式を指定
                    dataType: 'json'
                }).done((res) => {
                    // リクエストが成功したときの処理
                    console.log(res);
                    // 文字列をオブジェクトに変換(パース)
                    let data = res;
                    // リクエストが成功したときの処理
                    $('#box').html('1から' + data.max + 'までの合計は' + data.sum);
                }).fail(() => {
                    alert('エラーです');
                });
            });
        });
    </script>
</body>
</html>

今回は done メソッドに渡した無名関数の引数に api_sample.php からレスポンスされた json データが代入されています。

その中で、最大値と合計値を利用して表示を変更しています。

dataType: 'json'

上記のところで、受け取るデータを json データとして読み込んでいるところがポイントです。

results matching ""

    No results matching ""