estoy poniendo en práctica una API REST que expone órdenes como un recurso y es compatible con la paginación a través del conjunto de resultados:¿Cómo implementar una paginación robusta con una API RESTful cuando el conjunto de resultados puede cambiar?
GET /orders?start=1&end=30
donde las órdenes de paginar están ordenadas según la ordered_at
marca de tiempo, descendiendo. Este es básicamente el enfoque # 1 de la pregunta SO Pagination in a REST web application.
Si el usuario solicita la segunda página de pedidos (GET /orders?start=31&end=60
), el servidor simplemente volver a consulta la tabla de órdenes, ordena por ordered_at DESC
de nuevo y devuelve los registros en las posiciones 31 a 60.
El problema que tengo es : ¿Qué sucede si el conjunto de resultados cambia (por ejemplo, se agrega una nueva orden) mientras el usuario está viendo los registros? En el caso de que se agregue un nuevo pedido, el usuario vería el anterior # 30 en la primera posición en la segunda página de resultados (porque el mismo pedido ahora es # 31). Peor aún, en el caso de una eliminación, el usuario ve el orden # 32 anterior en la primera posición en la segunda página (# 31) y no vería el antiguo # 31 (ahora # 30) en absoluto.
No puedo ver una solución a esto sin hacer de alguna manera que el servidor RESTful sea estable (urg) o generando cierta inteligencia de paginación en cada cliente ... ¿Cuáles son algunas técnicas establecidas para manejar esto?
Para completar: mi back-end se implementa en Scala/Spray/Squeryl/Postgres; Estoy construyendo dos clientes front-end, uno en backbone.js y el otro en Python Django.