2013-11-21 40 views
1

我正在構建對項目進行操作的管理員應用程序。例如,它是「應用程序」的註冊表。因此,這種情況下的實體是「應用程序」,/應用程序顯示應用程序的列表,並允許基本的CRUD。將REST原則應用於您的應用程序的頁面

我真的很享受REST的簡單性,我們使用Zend Framework 2.然而,一個前提混淆了我的觀點,比如說GET http:[:: 1]/admin/applications應該顯示一個顯示LIST getList的頁面()的所有應用程序。但是,我們如何將PAGE,頁眉,頁腳和其他頁面相關元素與列表的原始DATA表示分離?如果我請求與內容類型json的GET /約會,我期望只是數據[item,item2]。如果我說HTML,我會期望只是HTML表。只是數據表的片段。

但我怎麼說「我想要/應用程序頁?」包括列表?這是一個單獨的概念嗎?除了getList()之外,其他每個REST動作似乎都很合適,因爲其他部分是作爲部分加載的,比如表單。我只想要一個返回窗體的控制器,並且該窗體通過ajax注入到對話框中。

回答

0

通常您以數據爲中心的格式勞逸結合。也就是說,JSON或XML。這些格式可以用簡單的方式表示數據,而不需要用戶可見標記的開銷。 HTML是標記,不適合數據表示。僅僅因爲這個事實,你不會在RESTful接口中看到HTML。

如果你想用你的REST API加載HTML,我只需要輸入text/html,然後把整個頁面放回去。因此包括頁眉,頁腳,導航等。沒有所有這些額外的元素,只有一個需要返回HTML:就是在XmlHttpRequests的情況下。

大多數發送XHR的JavaScript庫添加請求標頭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。想想關於像Ember或Angular.js這樣的JavaScript MVC框架。

您可以將html與REST風格的API混合使用,但不要混淆太多。這很難,你不會成功。只有兩種不同的架構系統。

1

您不需要從原始數據_if_the text/html的客戶端請求中分離與頁面相關的元素。如果原始數據是application/json,那麼想要查看它們的客戶端可以請求在http accept頭中設置的application/json。

爲了幫助基於所接受頭部的內容,請參閱acceptable view model selector controller plugin

+0

我認爲這是另一個概念,所以我引入了一個新的「管理」路線。 WDYT?所以現在: /applications - >只是應用程序列表 /applications/manage - >一個用於管理應用程序的頁面(crud鏈接列表和更多 /applications/id - >只是單個應用程序 /applications/id /編輯 - >編輯該應用程序的表格 /applications/create - >應用程序的新表格 所有的ApplicationsRestController公開了所有這些操作 – httpete

+0

請記住,URL應該指向資源(名詞),而不是動詞。 ,這就是我發現自己正在做某些原因(例如鏈接下載)。儘量限制他們幾句話,我使用'編輯'而不是'管理','刪除'和'創建'。 – imel96

相關問題