ZendFramework1でREST APIを試してみた

既存の業務アプリ内にある機能を外部から利用出来たらなあ・・・のような要件があり、RestAPIで実装を検討しました。対象のアプリは、今となっては・・・ですが、ZendFramework1が使われています。

こちらにいろいろ書いていますが、Zend_Rest_Controllerを使えばいいっぽい。

開発環境はEclipse + php + XAMPP
XAMPP内のphp/pearの中に、ダウンロードしたZendFramework1.12.20のZIPからlibrary内のZendを配置、XAMPP内のapache/conf/extra/httpd-xammp.confに該当プロジェクトのAliasをセットして環境ができました。

    Alias /testapp "C:/xampp/htdocs/TestAPP/html/"
    
        AllowOverride All
         Require all granted
    

テスト用のEclipceプロジェクトはこんな感じで最少構成。

.htaccess でindex.phpに仕向けます。

RewriteEngine on
RewriteBase /testapp/
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

index.phpでdispatchします。

<?php
require_once 'Zend/Controller/Front.php';

$controller = Zend_Controller_Front::getInstance();
$controller->setControllerDirectory('../application/controllers');
$controller->setParam('noViewRenderer', true);

try {
	$controller->dispatch();
} catch (Exception $e) {
}

ControllerにZend_Rest_Controllerとして必要なメソッドを追加していきます。

<?php
require_once 'Zend/Rest/Controller.php';

class TestController extends Zend_Rest_Controller  {

    public function indexAction() {
		$this->getResponse()->appendBody("hello world " . $_REQUEST[param1]);
    }

    public function headAction(){
//TODO
    }
    public function getAction() {
//TODO
    }
    public function postAction() {
//TODO
    }
    public function putAction() {
//TODO
    }
    public function deleteAction() {
//TODO
    }
}

で、ブラウザから動作確認

URLをいろいろ意識すると難しそうですが、これなら簡単ですね。