PHPで簡単なAPIのモックを作る
PHPに触るきっかけ作り
Web関係のプログラムでNode(JavaScript)やPythonを触ったことはあるが,
未だにPHPのコードは一度も書いたことがないし,まともにコードを読んだことがない.
かつ,最近,アルバイト先でPHP需要が高まってる雰囲気がある.
そもそもWeb系といえばまずPHPっていう気もする.
なので,PHPをちょっとずつ勉強していきたい.
APIのモックの開発でPHPデビューする
Webページ(アプリ)のフロントエンドを開発する際,
開発してるページからまだ開発していないAPIを叩きたい時がある.
こんな時のため,とりあえず受け答えだけしてくれるような簡易版のサーバー(APIのモックサーバー)があると便利.
今回はPHPデビューのためにも,APIのモックをPHPで作成する.
実装内容
今回は今作ってるWebページで必要なGETとPOSTを受けてくれるサーバーを作る.
また,受け渡しするデータはJSONデータを想定している.
具体的な実装内容は,以下の通り.
今回のソースコード
今回書いたソースコードは最終的にこんな感じになりました.
<?php // Origin null is not allowed by Access-Control-Allow-Origin.とかのエラー回避の為、ヘッダー付与 header('Access-Control-Allow-Origin: *'); function api4leaflet () { // GET用のjson $spots = [ [ 'name' => 'スポット1', 'category' => 'A', 'lat' => '34.598804', 'lng' => '133.76884' ], [ 'name' => 'スポット2', 'category' => 'B', 'lat' => '34.606323', 'lng' => '133.793363' ], [ 'name' => 'スポット3', 'category' => 'A', 'lat' => '34.61858', 'lng' => '133.759183' ] ]; switch ($_SERVER['REQUEST_METHOD']) { case 'GET': echo json_encode($spots, JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES); break; case 'POST': echo json_encode(file_get_contents('php://input'), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES); break; default: echo 'unexpected request'; break; }; } switch ($_SERVER['REQUEST_URI']) { case '/leaflet': api4leaflet(); break; default: echo 'unexpected URI'; break; }
実行コマンド
以下のコマンドで実行しています.
$ php -S 127.0.0.1:5000 api_mock.php
この場合,ブラウザなどからhttp://127.0.0.1:5000
にアクセスすることで,
サーバーにアクセスできます.
各コードについて
Headerとかはよく調べてなくて,人のコードそのままパクっていますが, その他のコードの意味は以下の通り.
$_SERVER['REQUEST_URI']
サーバーのルート以下のパスが入っています.
例えば,http://127.0.0.1:5000/leaflet
にアクセスした場合, この変数には文字列/leaflet
が格納されます.$_SERVER['REQUEST_METHOD']
実行したAPIの種類が入っています.GET
やPOST
といった文字列がそのまま入っています.file_get_contents('php://input')
これでクライアントが送ってきたbody
が取り出せるっぽい.json_encode($spots, なんやかんや);
サーバーからクライアントにJSONなどのデータを送る際, そのデータを一旦文字列に変換する必要があります. これはその変換をするコード.
また,第二引数のなんやかんや
は省略しても送信できますが, 日本語のデータを送る際はこれを書かないとunicodeか何か謎の形式になってしまうので,今回はごちゃごちゃ書いてます.
この引数を書かない場合と書いた場合は以下の通り.