【发布时间】:2012-01-19 05:05:51
【问题描述】:
我正在实现一个 RESTful API,它将订单作为资源公开并支持通过结果集进行分页:
GET /orders?start=1&end=30
要分页的订单按ordered_at 时间戳排序,降序排列。这基本上是来自 SO 问题Pagination in a REST web application 的方法#1。
如果用户请求第二页订单(GET /orders?start=31&end=60),服务器只需重新查询订单表,再次按ordered_at DESC排序,返回位置31到60的记录。
我遇到的问题是:如果在用户查看记录时结果集发生变化(例如添加新订单),会发生什么情况?在添加新订单的情况下,用户会在结果的第二页的第一个位置看到旧订单 #30(因为现在相同的订单是 #31)。更糟糕的是,在删除的情况下,用户会在第二页(#31)的第一个位置看到旧订单 #32,而根本看不到旧订单 #31(现在是 #30)。
如果不以某种方式使 RESTful 服务器有状态 (urg) 或在每个客户端中构建一些分页智能,我就无法找到解决方案......有哪些成熟的技术可以处理这个问题?
为了完整性:我的后端是在 Scala/Spray/Squeryl/Postgres 中实现的;我正在构建两个前端客户端,一个在backbone.js 中,另一个在Python Django 中。
【问题讨论】:
标签: scala rest backbone.js