Правильная структура кода при предоставлении доступа к REST API с использованием Zend_Rest_Controller - PullRequest
1 голос
/ 16 марта 2011

Я новичок в программировании на Zend Frameworks и MVC (но не на PHP) и пытаюсь предоставить API-доступ к данным на моем сервере с помощью Zend Framework.

Я использую Chris Danielson'sстатья (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

Вопросы:

  1. Существует файл по умолчанию, расположенный в \ api \ application \ controllers \ VersionController.php, который позволяет обрабатывать URL-адреса типа: http://www.example.com/api/version. Должен ли я создавать отдельный файл находится по адресу: \ api \ application \ controllers \ GeteventdetailsController.php, который обрабатывает запросы типа (b) (и по одному для каждого типа запроса). Если нет, где я должен размещать свой код для обработки этих нескольких типов запросов?

  2. Как получить параметры, переданные в (b) - (d)?

  3. Для выполнения запросов (b) - (d), янужно получить информацию из базы данных моего сервера. Где я должен разместить код, который делаетЭто фактический запрос MySQL?

Ответы [ 2 ]

0 голосов
/ 24 марта 2011

Мэтт, я думаю, что нашел ответ на вашу проблему. Я решил опубликовать здесь, так как я потратил много времени, прежде чем найти ответ. Именно на Hataccess вы устанавливаете конфигурацию так, чтобы все перенаправлялось на вашу страницу php, которая будет обрабатывать разбор URI и так далее ...

Создание RESTful API и веб-сайта с PHP

0 голосов
/ 17 марта 2011

Я много использовал маршруты в ZF, но не в реализации Rest, подробно описав документы и учебник, на который вы ссылались - я сделаю все возможное, чтобы помочь вам ...

Возможно, стоит взглянуть на документы для Rest router (примерно на 1/3 вниз по странице) - это объясняет, что он автоматически создаст для вас маршруты на основе метода запроса; поэтому формат именования createevent , geteventdetails и т. д. не требуется.

Вопрос 1.

Вместо создания файла

\ апи \ Application \ Контроллеры \ GeteventdetailsController.php

Я бы создал файл

\ апи \ Application \ Контроллеры \ EventsController.php

Это будет один контроллер, который будет обрабатывать все действия события, будь то получение, публикация, размещение и т. Д. Ваше предложение слишком специфично для контроллера, так как получение, размещение и т. Д. Будут обрабатываться на уровне действия.

Вопрос 2.

Маршруты, описанные в документации, показывают, что последний параметр (: id) будет назначен параметру в контроллере, который называется id.

Таким образом, доступ к URL / events / с использованием GET вызовет indexAction() в вашем EventsController.php файле

И доступ к URL / events / 99 / с использованием GET вызовет getAction() в вашем файле EventsController.php. Вы можете получить доступ к этому идентификатору из контроллера, как это

$id = $this->getRequest()->getParam("id");

OR

$id = $this->getRequest()->id;

Затем вы должны написать код для запроса базы данных для получения списка событий или для конкретного идентификатора. Что приводит нас к ...

Вопрос 3.

Вместо того, чтобы помещать код для запроса базы данных о событиях в контроллер, вы должны создать модели для таблиц и строк базы данных. Я бы порекомендовал использовать существующие настройки в ZF для Zend_Db_Row и Zend_Tb_Table , чтобы сделать это. Это гарантирует, что ваше приложение / веб-сайт MVC.

Помещение кода в контроллер может помешать разработке позже, например, когда вы пишете регистрационную форму для события на более позднем этапе в другом контроллере. Логика создания события будет продублирована, один раз в новом контроллере и один раз в контроллере отдыха. Вам лучше было бы централизовать эту логику в модель для манипулирования событиями и их запроса.

Надеюсь, это поможет!

...