应用于应用程序页面时的REST原则

时间:2013-11-21 22:03:22

标签: rest zend-framework zend-framework2

我正在构建一个对项目进行操作的管理应用程序。例如,它是“应用程序”的注册表。因此,在这种情况下,实体是一个“应用程序”,而/ applications显示一个应用程序列表,并允许基本的CRUD。

我真的很享受REST的简单性,我们使用Zend Framework 2.然而,一个前提让我困惑,说GET http:[:: 1] / admin / applications的想法应该显示一个显示LIST getList的页面( )所有申请。但是,我们如何将PAGE,页眉,页脚和其他页面相关元素与列表的原始DATA表示分开?如果我使用内容类型json请求GET /约会,我会期望JUST数据[item,item2]。如果我说HTML,我会期望只是html表。只是作为数据表的片段。

但我怎么说“我想要/ applications PAGE?”包括列表?这是一个单独的概念吗?除了getList()之外,每个其他REST动作似乎都很合适,因为其他部分被加载为部分,比如表单。我只想要一个返回表单的控制器,该表单通过ajax注入对话框。

2 个答案:

答案 0 :(得分:1)

您无需将页面相关元素与原始数据_if_the客户端请求text / html分开。如果是原始数据,比如application / json,想要查看它们的客户端可以请求在http接受标头中设置application / json。

要根据接受标头生成内容,请参阅acceptable view model selector controller plugin

答案 1 :(得分:0)

通常您以数据为中心的格式使用REST。也就是说,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与RESTful api混合到一定程度,但尽量不要混合太多。这很难,你不会在这方面取得成功。只有两种不同的建筑系统。

相关问题