技術情報

WebAPI作り方【PHP】Slimフレームワークで既存クラスの使いまわし法!

WebAPI作り方【PHP】Slimフレームワークで既存クラスの使いまわし法!!
この記事は、Webサイトを作ったけど一部をWebAPI化したいんだよね、どうしたらいいの?に答えます。

高度なURLルーター機能を持つSlimフレームワークを使って解決!そのセットアップ方法とコーディングサンプルを紹介します。

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()内の引数(=コールバック)について解説します。
WebAPI作り方【PHP】Slimフレームワークで既存クラスの使いまわし法!-Slimコールバック

コールバック可能な引数
  1. HTTPリクエストオブジェクト【ServerRequestInterface】※1
  2. HTTPレスポンスオブジェクト【ResponseInterface】※1
  3. ルート名のプレースホルダの値が含まれている連想配列

※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クラスのインスタンスを生成
  • ルーティングは各メソッドのデリゲートで行う

構成イメージ

WebAPI作り方【PHP】Slimフレームワークで既存クラスの使いまわし法!-構成イメージ図

ソース

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フレームワークでWebAPI作り方【PHP】既存クラスの使いまわし法!-WebAPI呼び出し結果
※/index.php/部分は.htaccessなどでルーティングするとよりAPIっぽくなります。

まとめ

Slimマイクロフレームワークは既存の資産をWeb API化する上でとても便利です!

アプリからの呼び出しにも利用でき、資産+αでより提案内容も充実すると思います。

Web API化する上での認証サンプルなども発信していきたいと思います!