80
88

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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
https://github.com/k-okina/KahiroFramework/blob/master/index.php

##参考にしたサイト

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?