既存の業務アプリ内にある機能を外部から利用出来たらなあ・・・のような要件があり、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をセットして環境ができました。
1 2 3 4 5 |
Alias /testapp "C:/xampp/htdocs/TestAPP/html/" <Directory "C:/xampp/htdocs/TestAPP/html/"> AllowOverride All Require all granted </Directory> |
テスト用のEclipceプロジェクトはこんな感じで最少構成。
.htaccess でindex.phpに仕向けます。
1 2 3 |
RewriteEngine on RewriteBase /testapp/ RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php |
index.phpでdispatchします。
1 2 3 4 5 6 7 8 9 10 11 |
<?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として必要なメソッドを追加していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<?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をいろいろ意識すると難しそうですが、これなら簡単ですね。