假设我有一个RESTful,超文本驱动的服务,可以为冰淇淋商店建模。为了更好地管理我的商店,我希望能够显示一份每日报告,列出出售的每种冰淇淋的数量和美元值(value)。
这种报告功能似乎可以作为称为DailyReport的资源公开。 DailyReport可以快速生成,并且在服务器上实际存储报表似乎没有任何好处。我只需要几天的DailyReport,而其他几天我不在乎获取DailyReport。此外,将DailyReports存储在服务器上会使客户端实现复杂化,需要记住删除它们不再需要的报告。
DailyReport是暂时的;其表示只能检索一次。一种实现方法是提供一个链接“/daily-reports”,一个POST将返回一个包含DailyReport表示形式的响应,该响应列出了当天的销售信息。
编辑:也可以说我确实确实想发出POST请求。 DailyReport具有许多用于创建 View 的选项,例如,按美元值按字母顺序对冰淇淋类型进行排序-或按小时分割-或可选地包括当天的温度-或过滤掉某些冰淇淋类型(作为列表)。而不是使用查询参数与GET,我宁愿POST用适当的选项(使用良好定义的自定义的媒体类型来记录每个选项)一个DailyReport表示。我返回的表示形式将显示我的选项以及报告本身。
这是思考问题的正确方法,还是应该改用其他方法?如果正确,那么在实现DailyReport资源时,哪些特殊的注意事项可能很重要? (例如,在POST请求后返回时,可能不适合设置Location header )。
最佳答案
如果要提供过去几天的每日报告,可以将其实现为/daily_reports/2009/08/20
的GET。我同意约翰·米利金(John Millikin)的观点,此处不需要POST-无需将这样的东西作为用户可创建的资源。
使每天的报告作为其自己的URI可用的优点是可缓存性。
编辑:一个好的解决方案可能是合并两个答案,使daily_report/
成为当日数据的无缓存表示,而daily_reports/yyyy/mm/dd
成为一整天数据的可缓存表示。