我陷入两难境地.
我的网络应用程序处理人物,地点,资产(例如图像),标签等主题,我在其routes.rb中使用由map.resources生成的RESTful路由.
访问者可以设置各种选项来查看此数据,例如排序顺序,选择我的资产类型,所有者或关联的标记以及视图类型.这些选项是粘性的,因此如果访问者导航,那么当他们返回资产视图时,相同的选项将生效.
为此,我使用map.resource创建了一个SessionController和相关的restful路由. update方法接受asset_type,view_type和owner_id等参数,并将它们存储在会话对象中.然后,AssetController #index使用这些值来选择要显示的数据和正确的视图.
我的问题是我还需要能够发布像“http://www.foo.com/assets?user_id=10&tag_id=185&type=video&sort=recent”这样的网址 – 用于通过电子邮件发送等.
查询参数会覆盖当前会话中存储的所有设置.它们也需要粘性,否则“导航并回到同一位置”的原则就会被打破.这意味着AssetController #index必须将任何查询参数与当前会话设置合并,并将组合结果存储回会话中.
所以我现在有两种方法做同样的事情,这似乎不是很干.
我不喜欢具有这种精神分裂症质量的会话,但它确实简化了能够使用表单来选择排序顺序和设置复杂的过滤选项等的事情.
将会话视为要发布的资源我是错误的吗?
如果您能给我任何指导,我将不胜感激.
最佳答案 从理论上讲,你是对的. REST具有由Fielding(REST的“发明者”)解释的无状态约束
here.事实上,如果你想坚持他的REST提议,你根本就没有“粘性”选项.这意味着参数必须在每个请求中传递而不是从会话对象中检索,这样您就可以在描述的两种情况下采用一致的方法.