Я пытаюсь внедрить REST API для моего сайта.
Моя проблема в том, что мешает Zend-маршрутизация по умолчанию. Сначала я попытался использовать Zend_Rest_Route, но я не смог понять, как я должен был правильно использовать его для «глубоких» маршрутов, также известный как сайт / api / resource1 / filter / resource2 / id.
Используя стандартную Zend-маршрутизацию, мне нужно было бы создать гигантский Resource1Controller, чтобы позаботиться обо всех возможных действиях, и я не думаю, что это "хороший" способ сделать это.
Я попытался с помощью Resauce (http://github.com/mikekelly/Resauce/), создать модуль API и добавить маршруты, но я не могу заставить его работать правильно:
Шаблоны, которые я добавил, были:
$this->addResauceRoutes(array(
'api/resource' => 'resource',
'api/resource/:id' => 'custom',
'api/resource/filter' => 'resource-filter',
'api/resource/filter/:id' => 'custom',
));
Что затем приводит к этому:
public function addResauceRoutes($routes) {
$router = Zend_Controller_Front::getInstance()->getRouter();
foreach ($routes as $pattern => $controller) {
$router->addRoute($controller,
new Zend_Controller_Router_Route($pattern, array(
'module' => 'api',
'controller' => $controller
)
)
);
}
Zend_Controller_Front::getInstance()->setRouter($router);
- веб-сайт / API / ресурс получает меня
Resource1Controller, хорошо
- website / api / resource / filter возвращает меня к
resource1filterController, нормально
- website / api / resource / filter /: id заставляет меня
пользовательский контроллер, ок
- Я бы хотел, чтобы сайт / api / resource /: id перевел меня на тот же пользовательский контроллер ... Но он перенаправляет меня на Resource1Controller.
Какое решение для меня правильно создать мой API? Есть ли хороший способ сделать это с Zend_Rest_Route?
Редактировать: Майк,
Я чувствовал, что для меня неуместно использовать разные контроллеры, так как мне нужны пути "website / api / resource /: id" и "website / api / resource / filter /: id", чтобы дать мне почти точную информацию тот же результат (с той лишь разницей, что, поскольку там есть фильтр, я могу получить сообщение с сообщением «контент отфильтрован»).
Я подумал, что создание другого почти идентичного контроллера было тратой, когда я мог бы использовать тот же контроллер и просто проверить, присутствует ли параметр «фильтр».
Однако я не хочу использовать базовую маршрутизацию Zend, так как для пути "website / api / resource / filter / resource2" я хотел бы иметь совершенно другой состав, поэтому я бы хотел использовать другой контроллер, тем более что я пытаюсь использовать Zend_Rest_Action и мне нужны мои контроллеры для использования основных действий getAction (), putAction (), postAction () и deleteAction ().