PHPで超簡単自作APIフレームワーク
#目的
JSONの勉強
##製作動機
JSONを返すって普通に言ってたけど、JSONを返すって何。。。?
##対象者読者
JSONの説明をしてって言って、パッと具体的に説明できない人
##事前準備
- JSONがそもそも何なのかわからない人はこちら
- urlパースがよくわからない人はURLを取得できる
$_SERVER['PATH_INFO']
- 動的言語機能が良くわからない人は動的に呼ぶクラスを変更できる動的言語機能
#関連記事
##補足
ルーティング等が搭載されていないのは、本記事はあくまでJSONがメインだからです。その内ルーティングクラスやORマッパーを搭載したフレームワークも公開する予定です。
##作ってみよう
###今回実装する内容
1.urlの初めに来るurlに相対したcontrollerを呼ぶオートローダー機能
例:localhost/apiでリクエスト
include('./controllers/Api.php');
2.controllerはファイル名と同じクラスで作成し、その中のindex(@params)メソッドが呼ばれる
例:localhost/blogでリクエスト
class Api
{
public function index() : array
{
return array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
}
}
###ソースコード全容
<?php
if (empty($_SERVER['PATH_INFO'])) {
exit;
}
//スラッシュで区切られたurlを取得します
$parse = explode('/', $_SERVER['PATH_INFO']);
$call = "";
foreach ($parse as $value) {
if ($value !== "") {
$call = $value;
break;
}
}
//ApiControllerをインクルードし、JSONを返します
if (file_exists('./controllers/'.$call.'.php')) {
include('./controllers/'.$call.'.php');
//$call名のcontrollerをインスタンス化します
$className = "controllers\\".$call;
$obj = new $className();
//controllerのindexメソッドを呼びます
$response = json_encode($obj->index());
//ヘッダーを指定してJSONを出力
header("Content-Type: application/json; charset=utf-8");
echo $response;
}
##解説
1.パラメーター1つ目が呼ばれるcontrollerと相対します。
require_once('./library/illuminate/Validate.php');
use library\illuminate\Validate as Validate;
if (empty($_SERVER['PATH_INFO'])) {
exit;
}
//スラッシュで区切られたurlを取得します
$parse = explode('/', $_SERVER['PATH_INFO']);
$call = "";
foreach ($parse as $value) {
if ($value !== "") {
$call = $value;
break;
}
}
2.controllerを呼び、帰ってきた連想配列をjson_encodeを使用してJSON形式のstring型文字列に変換します
//ApiControllerをインクルードし、JSONを返します
if (file_exists('./controllers/'.$call.'.php')) {
include('./controllers/'.$call.'.php');
//$call名のcontrollerをインスタンス化します
$className = "controllers\\".$call;
$obj = new $className();
//controllerのindexメソッドを呼びます
$response = json_encode($obj->index());
}
3.JSONの規則に沿って記載されているstring型文字列を出力(JSONを返すってこれの事です)して終わり。
//ヘッダーを指定してJSONを出力
header("Content-Type: application/json; charset=utf-8");
header("X-Content-Type-Options: nosniff");
echo $response;
4.localhost/やlocalhost////って入力された際の対策
if (empty($_SERVER['PATH_INFO'])) {
exit;
}
##まとめ
- JSONとは、記載形式の規則でした。
- JSONを返すとは、JSON形式のstringを出力する事でした。
##GitHub
https://github.com/k-okina/KahiroFramework/blob/master/index.php
##参考にしたサイト