En SOA no deberíamos crear o mantener el estado (o el diseño de dependencias) entre el cliente y el servidor. Esto es entendido Pero, ¿qué patrones se pueden seguir en el caso de que un cliente quiera consumir un servicio en tiempo real que pueda devolver un número abierto de 'filas'?SOA/Web Service Pagination
Las aplicaciones web, similares a SOA pero que permiten estados (sesiones), han resuelto esto con la paginación. La paginación requiere (en la mayoría de los casos, especialmente con SQL) que el servidor contenga los datos y que el cliente solicite los datos en fragmentos.
Si consideráramos escenarios de paginación para servicios web, ¿qué patrones seguirían que permitieran adherirse a los principios de SOA (o lo más cerca posible)?
Algunas reglas para los pensadores: 1) Con el respaldo de una base de datos SQL (por lo tanto, no existe el concepto de un número de fila en un conjunto de selección) 2) Es importante no saltarse una fila o duplicar una fila en una establecido durante la paginación 3) los datos pueden ser insertados y eliminados en cualquier momento en la base de datos de otros clientes 4) no hay necesidad de considerar el conjunto de datos de un vivo() conjunto de datos update-poder
en lo personal, creo que 1 y 2 arriba ya deletrean nuestra solución al restringir el espacio de la solución con los requisitos.
Mi solución propuesta tendría los datos (tanto como se seleccionen) almacenados en un almacén/caché de solo lectura donde se le puede asignar un número de fila dentro del conjunto de resultados y permitir que la paginación ocurra en esta instantánea de datos. Tendría una infraestructura para almacenar instantáneas (servidores, cachés externos, memcached o ehcache, esto debe escalar bastante). El resultado de dicha consulta sería una ID de instantánea y los clientes podrían recuperar los datos de la instantánea utilizando una API de instantánea (servicios web) y la identificación de la instantánea. Los resultados se procesarían de manera solo de lectura, solo para reenvío para x registros en un momento donde x era algo razonable.
Pensamientos e ideas en conflicto, críticas o elogios serían muy apreciados.
Le indicaré cómo Twitter maneja su paginación. Esto podría serle útil https://dev.twitter.com/rest/public/timelines –