我在Zend中实现了一个搜索表单(后端的SOLR)。 为了向用户提供更多控制,我添加了一个用于应用某些内容过滤器的多重复选框。
事情是按照以下步骤进行的(在此承担责任):
发出请求,类似于/search/?q=bla&filter=1
请求在控制器中重写为:/search/query/bla/filter/1
如果用户删除过滤器1,则添加过滤器2并提交请求变为:/search/query/bla/filter/1?q=bla&filter=2
如何使用它正确创建一个restful请求。这里的问题是使用Controller的getRequest()功能我也会得到第一个过滤器的值,这意味着我无法知道哪一个我可以丢弃。
所以,要总结: 如何正确使用Zend_Form创建RESTful HTTP请求
答案 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
是用于标识搜索资源的搜索标识符。