LoginSignup
80
88

More than 5 years have passed since last update.

PHPで超簡単APIフレームワーク

Last updated at Posted at 2016-10-24

PHPで超簡単自作APIフレームワーク

目的

JSONの勉強

製作動機

JSONを返すって普通に言ってたけど、JSONを返すって何。。。?

対象者読者

JSONの説明をしてって言って、パッと具体的に説明できない人

事前準備

  1. JSONがそもそも何なのかわからない人はこちら
  2. urlパースがよくわからない人はURLを取得できる$_SERVER['PATH_INFO']
  3. 動的言語機能が良くわからない人は動的に呼ぶクラスを変更できる動的言語機能

関連記事

  1. PHPで超簡単自作フレームワーク

補足

ルーティング等が搭載されていないのは、本記事はあくまでJSONがメインだからです。その内ルーティングクラスやORマッパーを搭載したフレームワークも公開する予定です。

作ってみよう

今回実装する内容

1.urlの初めに来るurlに相対したcontrollerを呼ぶオートローダー機能

例:localhost/apiでリクエスト

index.php
include('./controllers/Api.php');

2.controllerはファイル名と同じクラスで作成し、その中のindex(@params)メソッドが呼ばれる
例:localhost/blogでリクエスト

controllers/Api.php
class Api
{
    public function index() : array
    {
        return array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
    }
}

ソースコード全容

index.php
<?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;
}

まとめ

  1. JSONとは、記載形式の規則でした。
  2. JSONを返すとは、JSON形式のstringを出力する事でした。

GitHub

参考にしたサイト

80
88
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
80
88