phpでwebAPIを作る方法を解説していきます。
本来はデータベースから情報を引き出して使用することがほとんどですが、長くなるので今回は省略します。
対象:ネットワーク通信/json/phpがなんとなくわかる人。
トランプでピラミッドをn段作る時に必要なカードの枚数を出力してくれるAPIを制作して行きます。
APIの全体像
まずはwebAPIの全体像を把握しましょう。
webAIPとは関数のようなもので、〇〇を入力すると、△△と帰ってくるものです。
しかし、関数は、記載したファイルを所有している人しか使用することはできません。
これを誰もが使用できるように公開したい場合に、インターネットを介して公開する方法がwebAPIです。
データはjsonもしくわXMLです、最近はjsonが主流のようです。
実行方法
関数はfunction名を用いて実行しますが、webAIPはURLを用いて実行します。
必要なもの
インターネットを介してやりとりするのでデータを提供するクライアントと使用するユーザーがいます。
クライアント側
・APIのデータを制作する処理を記載したファイル
ユーザー側
・APIを叩く処理を記載したファイル
webAPIの作り方
まずは処理の流れを見て行きます。
入力値を取得
↓
バリデーションチェック
↓
データベース通信や値の加工
↓
jsonデータを制作
↓
エンコードして送信
入力値を取得
入力された値を取得します。
値はURLの後に「?」を記載し、そのあとにあらかじめ指定した文字列を記載し、「=値」を記載することで入力されます。言葉ではわかりにくいので以下を見てください。
http://ドメイン名/ファイル名.php?名前=値
となります。
以下のコードで指定された入力値を取得することができます。
1 |
$query_num = $_GET['num']; |
$_GETの[]の中にURLの「名前」の部分と同じ文字を記載します。
そうすることで、URLの「値」の部分を取得することができます。
バリデーションチェック
入力された値が、正しいものかどうかチェックし、正しくない場合はエラーを返しましょう。
例えば数字の計算を行う処理を記載しているのに文字列が入力されるとおかしくなり、正しい値が出力できなくなってしましますので、入力された時点で弾いてしまいましょう。
今回の場合は
・入力値が空だった場合
・入力値が数字ではなかった場合
この2つの場合は処理を実行せず、エラーを返すようにします。
1 2 3 4 5 |
if(!isset($query_num) || !is_numeric($query_num)){ http_response_code(500);//httpレスポンスコード echo 'no query'; exit(); }; |
データベース通信や値の加工
きちんと数字が入力されていればその値を元にデータベースからデータを取得したり、値の加工を行なって行きましょう。
今回はデータベースを使用せず、値の加工のみを行います。
今回求めたいのはn段のトランプピラミッドを作る際に必要なカードの枚数ですので以下のコードを記載します。
1 |
$reslt_query = (3 * (($query_num / 2) * ($query_num + 1))) - $query_num; |
1〜nまでを全て足し合わせ、3倍し、nを引いているだけです。
jsonデータを制作
送信するためのjsonデータを制作しましょう。
1 2 3 4 |
$jsondata = array( 'query' => $query_num, 'result' => $reslt_query ); |
配列に値を格納して行きます。
今回は入力値と、結果を出力します。
送信
データを送信します。
1 2 |
http_response_code(200); //HTTPレスポンスコード echo json_encode($jsondata, JSON_UNESCAPED_UNICODE); //エンコードして送信 |
http_response_code(200);で正しく処理が完了したことを伝えます。
json_encode(データ名, JSON_UNESCAPED_UNICODE);でデータをエンコードし、echoを使って出力します。
全コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php $query_num = $_GET['num'];//値を取得 //バリデーションチェックここから if(!isset($query_num) || !is_numeric($query_num)){ http_response_code(500);//httpレスポンスコード(エラー) echo 'no query'; exit(); }; //バリデーションチェックここまで $reslt_query = (3 * (($query_num / 2) * ($query_num + 1))) - $query_num;//計算処理 //データここから $jsondata = array( 'query' => $query_num, 'result' => $reslt_query ); //データここまで http_response_code(200); //HTTPレスポンスコード(完了) echo json_encode($jsondata, JSON_UNESCAPED_UNICODE); //エンコードして送信 exit(); |
webAIPを叩いてデータをもらう
全体の流れ
URLを叩く
↓
デコードする
↓
結果をみる
URLを叩く
=のあとに続く値を決め、URLに結合し、そのURLを叩きましょう。
1 2 |
$num = 10; $url = "https://ドメイン名/ファイル名.php?num=".$num; |
file_get_contents(url)でAPIを叩くことができます。
1 |
$data = file_get_contents($url); |
デコードする
jsonで受け取ったデータをデコードします。
1 |
$data = json_decode($data,true); |
第2引数をtrueにすることで配列形式として扱うことができます。falseにすると配列形式ではなくなります。
結果をみる
1 |
print_r($data); |
全体のコード
1 2 3 4 5 |
$num = 10; $url = "https://ドメイン名/ファイル名.php?num=".$num; $data = file_get_contents($url); $data = json_decode($data,true); print_r($data); |
まとめ
【クライアント側のAPIのデータを制作する処理を記載したファイル】
入力値を取得
↓
バリデーションチェック
↓
データベース通信や値の加工
↓
jsonデータを制作
↓
送信
【ユーザー側のAPIを叩く処理を記載したファイル】
URLを叩く
↓
デコードする
↓
結果をみる
思ったより簡単にAPI制作は可能です。
次はデータベースを挟んだAPIも作ってみましょう。
コメント