Zend_Form和RESTful HTTP请求

时间:2012-10-03 09:34:46

标签: php http zend-framework nginx zend-form

我在Zend中实现了一个搜索表单(后端的SOLR)。 为了向用户提供更多控制,我添加了一个用于应用某些内容过滤器的多重复选框。

事情是按照以下步骤进行的(在此承担责任):

  1. 发出请求,类似于/search/?q=bla&filter=1

  2. 请求在控制器中重写为:/search/query/bla/filter/1

  3. 如果用户删除过滤器1,则添加过滤器2并提交请求变为:/search/query/bla/filter/1?q=bla&filter=2

  4. 如何使用它正确创建一个restful请求。这里的问题是使用Controller的getRequest()功能我也会得到第一个过滤器的值,这意味着我无法知道哪一个我可以丢弃。


    所以,要总结: 如何正确使用Zend_Form创建RESTful HTTP请求

1 个答案:

答案 0 :(得分:1)

IMO,你正试图解决一个不存在的问题。你正在研究美学而不是RESTful合规。

REST告诉您需要识别资源,而不是资源链接应该看起来很好(在某种程度上)。但由于您的搜索是一种过滤器,因此使用QueryParam 完全可以接受。

我认为,您在REST中使用术语“搜索”是错误的。搜索不是资源(至少在您的情况下)。

您应该通过执行以下操作来隐藏搜索实现:

GET /articles?q=foo&filter=1

构建过滤条件的方式无关紧要。

或者您可能希望将“搜索”定义为资源(​​SO实际上就是IIRC)。

POST /articles/search/
"{
  "query" : "foo",
  "filter" : "bar"
}"

会导致类似:

Location: /articles/search/a125f41fbc135d

其中a125f41fbc135d是用于标识搜索资源的搜索标识符。