В SOA мы не должны создавать или удерживать состояние (или конструировать зависимости) между клиентом и сервером. Это понятно. Но какие шаблоны могут соблюдаться в случае, когда клиент хочет использовать услугу в режиме реального времени, которая может возвращать число строк с открытым концом?
Веб-приложения, похожие на SOA, но разрешающие состояние (сеансы), решили это с разбивкой по страницам. Для разбиения на страницы требуется (в большинстве случаев, особенно с SQL), что сервер хранит данные и что клиент запрашивает данные в кусках.
Если мы рассмотрим сценарии, похожие на страницы, для веб-сервисов, какие шаблоны будут следовать этим, это все равно позволит придерживаться принципов SOA (или как можно ближе).
Некоторые правила для мыслителей: 1) При поддержке базы данных SQL (поэтому в наборе выбора нет понятия номера строки) 2) Важно не пропускать строку или дублировать строку в наборе во время разбивки на страницы 3) Данные могут быть вставлены и удалены в любое время в базу данных другими клиентами 4) Нет необходимости рассматривать набор данных как живой (обновляемый) набор данных
Лично я считаю, что 1 и 2 выше уже произнесли наше решение, сдерживая пространство решения с требованиями.
Мое предлагаемое решение будет содержать данные (насколько это было выбрано) в хранилище/кеш-память, доступном только для чтения, где ему может быть присвоен номер строки в результирующем наборе и разрешить разбиение на страницы в этом снимке данных. У меня была бы инфраструктура для хранения снимков (серверов, внешних кэшей, memcached или ehcache - это должно масштабироваться довольно велико). Результатом такого запроса будет идентификатор моментального снимка, и клиенты могут извлекать данные из моментального снимка с помощью API-интерфейса моментальных снимков (веб-служб) и идентификатора моментального снимка. Результаты будут обрабатываться только в режиме "только для чтения", только для х записей в то время, когда x было чем-то разумным.
Было бы высоко оценено конкурирующие мысли и идеи, критические замечания или похвалы.