Правильная структура кода при предоставлении доступа к REST API с использованием Zend_Rest_Controller
Я новичок в программировании на Zend Frameworks и MVC (но не на PHP) и пытаюсь предоставить API-доступ к данным на моем сервере с помощью Zend Framework.
Я использую статью Криса Дэниелсона ( http://www.chrisdanielson.com/2009/09/02/creating-a-php-rest-api-using-the-zend-framework/) в качестве основы.
Я хочу предоставить доступ к данным в следующих форматах:
(a) http://www.example.com/api/createevent
Data will be POSTed here, success will return an id, otherwise an
error message/code
(b) http://www.example.com/api/geteventdetails/1234
GET request will return data
(c) http://www.example.com/api/getregistrationdetails/1234
GET request will return data
(d) http://www.example.com/api/getregistrationdetails/1234/567
GET request will return data
Вопросы:
Существует файл по умолчанию, расположенный по адресу \api\application\controllers\VersionController.php, который позволяет обрабатывать URL-адреса типа: http://www.example.com/api/version. Должен ли я создавать отдельный файл, расположенный по адресу: \api\application\controllers\GeteventdetailsController.php, который обрабатывает запросы типа (b) (и по одному для каждого типа запроса)? Если нет, где я должен разместить свой код для обработки этих нескольких типов запросов?
Как я могу получить параметры, переданные в (б) в (г)?
Для выполнения запросов (b) - (d) мне нужно получить информацию из базы данных моего сервера. Где я должен разместить код, который выполняет фактический запрос MySQL?
2 ответа
Я много использовал маршруты в ZF, но не реализацию Rest, подробно описав документы и учебник, на который вы ссылались - я сделаю все возможное, чтобы помочь вам...
Возможно, стоит взглянуть на документы для маршрутизатора Rest (примерно 1/3 вниз по странице) - он объясняет, что он автоматически создаст для вас маршруты на основе метода запроса; поэтому не нужно указывать формат имен createevent, geteventdetails и т. д.
Вопрос 1.
Вместо того, чтобы создавать файл
\ апи \ приложения \ Контроллеры \GeteventdetailsController.php
Я бы создал файл
\ апи \ приложения \ Контроллеры \EventsController.php
Это будет один контроллер, который будет обрабатывать все действия события, будь то получение, публикация, размещение и т. Д. Ваше предложение слишком специфично для контроллера, так как получение, размещение и т. Д. Будут обрабатываться на уровне действия.
Вопрос 2.
Маршруты, описанные в документации, показывают, что последний параметр (:id) будет назначен параметру в контроллере, называемом id
,
Таким образом, доступ к URL / событиям / с помощью GET вызовет indexAction()
в вашем EventsController.php
файл
И доступ к URL / events / 99 / с помощью GET вызовет getAction()
в вашем EventsController.php
файл. Вы можете получить доступ к этому идентификатору из контроллера, как это
$id = $this->getRequest()->getParam("id");
ИЛИ ЖЕ
$id = $this->getRequest()->id;
Затем вы должны написать код для запроса базы данных для получения списка событий или для конкретного идентификатора. Что приводит нас к...
Вопрос 3
Вместо того, чтобы помещать код для запроса базы данных о событиях в контроллер, вы должны создать модели для таблиц и строк базы данных. Я бы порекомендовал использовать существующие настройки в ZF для Zend_Db_Row и Zend_Tb_Table, чтобы сделать это. Это гарантирует, что ваше приложение / веб-сайт MVC.
Помещение кода в контроллер может позже помешать разработке, например, когда вы пишете форму регистрации для события на более позднем этапе в другом контроллере. Логика создания события будет продублирована, один раз в новом контроллере и один раз в контроллере отдыха. Вам лучше было бы централизовать эту логику в модель для манипулирования событиями и их запроса.
Надеюсь, это поможет!
Мэтт, я думаю, что нашел ответ на вашу проблему. Я решил опубликовать здесь, так как я потратил много времени, прежде чем найти ответ. Именно на Hataccess вы устанавливаете конфигурацию так, чтобы все перенаправлялось на вашу php-страницу, которая будет обрабатывать разбор URI и так далее...