高度なURLルーター機能を持つSlimフレームワークを使って解決!そのセットアップ方法とコーディングサンプルを紹介します。
Contants
Slimフレームワークとは?
PHPのマイクロフレームワークの一種。
特に高度なURLルーターを保有するフレームワーク。
ページ・テンプレート、フラッシュ・メッセージ、暗号化クッキー、ミドルウェアなどのサポートもされています。
Web API化する上でURLルーターとサポート機能に特化したフレームワーク。
マイクロフレームワークって?
ある特定の機能に特化した機能を保有するフレームワーク。
Slimの他にDBのORMマッパー特化のフレームワークなど、部品化したものがあります。
マイクロフレームワークの対義語はフルスタックフレームワークといいます。
有名なLaravelやCakePHPなどはフルスタックで、フレームワーク内にすべての機能がそろっています。
メリット・デメリット
メリット
必要な機能をのみなので、影響範囲が狭く学習する為のコストが低い
PHPの基本学習後の導入がしやすく、開発速度を上げる事が可能
覚える事が少なくて、さくっと機能追加できます。
デメリット
フレームワーク毎の相性が存在しそう
インターネット上の情報量の少なさ
使い方など英語解説のみの場合も多い
情報量がありそうなフレームワークを探してお気に入りにしていこう♪
使用方法
実際にSlimの使い方を解説します。
Web APIの呼び出し方、ソース、コールバック(引数)は下記の通りです。
基本構文
Slimでの基本的な使用構文
http://(サーバ名)/test
Slimの基本ソース
require 'vendor/autoload.php';
$app = new \Slim\Slim();
$app->get('/test',function($request, $response, $args){
echo "testAPI";
});
$app->run();
コールバック
function()内の引数(=コールバック)について解説します。
- HTTPリクエストオブジェクト【ServerRequestInterface】※1
- HTTPレスポンスオブジェクト【ResponseInterface】※1
- ルート名のプレースホルダの値が含まれている連想配列
※1:InterfaceはPsr\Http\Message空間
セットアップ方法
composerを使用してセットアップします。
php composer.phar require slim\slim
composer.jsonの編集をして行う方法もありますが、composer requireコマンドで追加するのが良いようです
Web API実装
実際にWeb APIを実装してみましょう。
前提条件は下記の構成イメージを見て下さい。
既存のWebサイトが存在し、DBへのアクセスを行うクラスが存在します。
Slimを使ってDBアクセスクラスから取得した値をAPI化します。
- API用のオリジナルクラスを作成
- クラス内にSlim及びDBクラスのインスタンスを生成
- ルーティングは各メソッドのデリゲートで行う
構成イメージ
ソース
dbModelのプロパティ値『modelNo=”1″, modelName=”Slim Taro”』がjsonでAPIから取得できます。
<?php
//autoload.phpは相対パスで指定
require '../../../vendor/autoload.php';
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
function h($str)
{
return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
}
//Model
class dbModel{
public $modelNo;
public $modelName;
public function __construct($no,$modelName){
$this->modelNo = $no;
$this->modelName = $modelName;
}
}
//Contoller
class dbController{
public function getModel(){
return new dbModel("1", "Slim Taro");
}
}
//実際のAPIクラス
class testAPI {
public $slim;
public $dbController; //Contollerインスタンス
public function __construct(){
$this->slim = new \Slim\App();
$this->dbController = new dbController();
$this->setupRouter();
}
public function __destruct(){
$this->dbController = null;
$this->slim = null;
}
private function setupRouter(){
$this->slim->get('/', array($this, 'getModel'));
}
public function getModel(){
$result = $this->dbController->getModel();
$rows = array();
$rows[]=array(
'modelNo'=>h($result->modelNo),
'modelName'=>h($result->modelName)
);
header("Content-Type: text/javascript; charset=utf-8");
echo json_encode($rows);
}
public function run(){
$this->slim->run();
}
}
$testAPI = new testAPI();
$testAPI->run();
結果
Google Chromeの拡張機能『Advanced REST client』をセットアップして実行します。
サーバ名はご利用のサーバもしくはローカルテスト環境で実行してみて下さい。
まとめ
Slimマイクロフレームワークは既存の資産をWeb API化する上でとても便利です!
アプリからの呼び出しにも利用でき、資産+αでより提案内容も充実すると思います。
Web API化する上での認証サンプルなども発信していきたいと思います!