Небольшой HowTo о том, как реализовать REST API с использованием Zend Framework 1.
Создадим новый модуль api (предполагается, что Ваш проект имеет модульную структуру).
Создадим контроллер User и унаследуем его от Zend_Rest_Controller.
[php] class Api_UserController extends Zend_Rest_Controller
{
public function init()
{
$this->getHelper(‘layout’)->disableLayout();
$this->getHelper(‘viewRenderer’)->setNoRender();
}
public function indexAction() {}
public function headAction() {}
public function getAction() {}
public function putAction() {}
public function postAction() {}
public function deleteAction() {}
}
[/php]
Для инициализации REST роутов воспользуемся классом [php]Zend_Rest_Route[/php]. Для этого в Bootstrap.php добавим следующий метод:
[php] protected function _initRoutes(){
$front = Zend_Controller_Front::getInstance();
$restRoute = new Zend_Rest_Route($front, array(), array(‘api’));
$front->getRouter()->addRoute(‘rest’, $restRoute);
}
[/php]
Можно инициализировать REST роут только для User контроллера:
[php] $restRoute = new Zend_Rest_Route($front, array(), array(‘api’ => ‘user’));[/php]
Есть еще одна проблема — это возможность вытянуть параметры из PUT запроса следующим образом:
[php] $userId = $request->getParam(‘id’);[/php]
Для PUT запроса этот метод вернет [php]null[/php].
Исправить это можно при помощи плагина [php]Zend_Controller_Plugin_PutHandler[/php]. Просто добавьте следующий метод в Bootstrap.php:
[php] protected function _initPlugins()
{
$front = Zend_Controller_Front::getInstance();
$front->registerPlugin(new Zend_Controller_Plugin_PutHandler());
}
[/php]
Enjoy! 🙂