2013-11-21 1 views
1

Я создаю приложение администратора, которое работает с элементами. Например, это реестр «приложений». Таким образом, сущность в этом случае является «приложением» и/приложениями, показывает список приложений и позволяет использовать базовый CRUD.REST Принципы применения к страницам вашей заявки

Я действительно наслаждаюсь простотой REST, и мы используем Zend Framework 2. Одна предпосылка смущает меня, однако, идея GET http: [:: 1]/admin/applications должна отображать страницу, которая показывает LIST getList() всех приложений. Но как мы отделяем PAGE, заголовок, нижний колонтитул и другие связанные с страницей элементы из необработанного представления DATA списка? Если я попросил GET/встречи с контентом типа json, я бы ожидал JUST данных [item, item2]. Если я скажу HTML, я бы ожидал JUST html-таблицу. Просто фрагмент, который является таблицей данных.

Но как я могу сказать: «Я хочу/приложение PAGE?» что ВКЛЮЧАЕТ список? Это отдельное понятие? Кажется, что любое другое действие REST прекрасно подходит, за исключением getList(), поскольку другие части загружаются как частичные, скажем, в форме. Мне просто нужен контроллер, который возвращает форму, и эта форма вводится через ajax в диалог.

ответ

0

Обычно вы работаете с REST в формате данных, ориентированных. То есть, JSON или XML. Эти форматы могут представлять данные простым способом, без накладных расходов на видимую видимость пользователя. HTML является разметкой и не подходит для представления данных. Вы не часто видите HTML в интерфейсах RESTful, только из-за этого факта.

Если вы хотите загрузить HTML с помощью REST API, я бы просто попросил текст/html и вернул полную страницу. Таким образом, включая заголовок, нижний колонтитул, навигацию и так далее. Существует afaik только одна потребность в возврате HTML без всех этих дополнительных элементов: это в случае XmlHttpRequests.

Большинство библиотек javascript, отправляющих XHR, добавляют заголовок запроса X_REQUESTED_WITH со значением XMLHttpRequest. В вашем приложении вы можете проверить этот заголовок, и если он установлен, вы будете отображать только таблицу «приложений».

class SomeController extends AbstractActionController 
{ 
    protected $acceptCriteria = array(
     'Zend\View\Model\JsonModel' => array(
     'application/json', 
    ), 
    ); 

    public function apiAction() 
    { 
     $viewModel = $this->acceptableViewModelSelector($this->acceptCriteria); 

     // Potentially vary execution based on model returned 
     if ($viewModel instanceof JsonModel) { 
     // Do some JSON things 

     // Return the JSON 
     return $viewModel; 
     } 

     // Do some HTML things 
     $viewModel->setVariable('foo', 'bar'); 

     // Render only this view model if it's a XHR 
     if ($this->getRequest()->isXmlHttpRequest()) { 
      $viewModel->setTerminal(true); 
     } 

     return $viewModel; 
    } 
} 

Однако, имейте в виду, что REST в основном используется для обмена данными. Если у вас есть REST api, у вас есть клиент перед ним, чтобы преобразовать данные в html. Подумайте, например, о структуре JavaScript MVC, например, Ember или Angular.js.

Вы можете смешать html с RESTful api в некоторой степени, но постарайтесь не смешивать их слишком много. Это сложно, и вам это не удастся. Есть только две разные архитектурные системы.

1

Вам не нужно отделять элементы, связанные с страницей, от необработанных данных _if_the запрос клиента на текст/html. Если исходные данные есть, скажем, application/json, клиент, который хочет их увидеть, может запросить приложение/json в заголовке http accept.

Для генерации контента на основе заголовка принимают см acceptable view model selector controller plugin

+0

Я думаю, что это еще одна концепция, поэтому я представил новый маршрут для «управления». WDYT? Итак, теперь: /applications -> только список приложений /applications/manage -> страница, используемая для управления приложениями (список ссылок и многое другое /applications/id -> только отдельное приложение /applications/id/edit -> Изменить форму для этого приложения /applications/create -> Новая форма для приложения Все на ApplicationRestController предоставляет все эти действия. – httpete

+0

Просто помните, что URL-адреса должны указывать на ресурсы (существительные), а не на глаголы. , это то, что я обнаружил, делает по некоторым причинам (например, ссылку для загрузки).Попытайтесь ограничить их несколькими словами, я использую «редактировать» вместо «управлять», «удалять» и «создавать». – imel96

Смежные вопросы