Я пытаюсь создать конечную точку GET для разбиения на страницы по результатам расчета матрицы. Позвольте мне объяснить.
Приходит запрос POST для вычисления матрицы. Этот запрос POST имеет X количество пунктов назначения и Y количество источников. Например, 700 X 1000. Этот запрос разбит на задания. Например (1 пункт назначения - 1000 источников) => 1 задание. Таким образом, в этом примере будет 700 заданий.
Существует приложение, которое извлекает эти задания, выполняет расчеты и пакетную запись в базу данных. Таким образом, в предыдущем примере, как только это задание будет завершено, база данных запишет 1000 элементов в таблицу. Итак, база данных ResponseItem выглядит примерно так.
1
.
.
.
1000 -> Last ResponseItem Job 1 Of Request 1
.
.
.
2000 -> Last ResponseItem Job 1 of Request 2
.
.
.
3000 -> Last ResponseItem Job 2 of Request 1
.
.
.
Я создаю конечную точку GET для получения этих результатов по RequestId. Знающий клиент может получить 1000 результатов на страницу. У меня есть реализация для разбивки на страницы на основе курсора.
Вот что у меня есть ПОЛУЧИТЬ
http://api.com/APIs/REST/service.svc//matrix/get_results?requestid=@RequestID&limit=@PageSize&next_page_cursor=@LastSeenID
И именно так моя нумерация страниц на основе курсора будет работать в моей таблице ResponseData, которая является автоматически увеличивающейся.
SELECT id, RequestId, ...
FROM ResponseData
WHERE ResponseData.RequestId = @RequestID AND ResponseData.id > @LastSeenID
ORDER BY ResponseData.id ASC
LIMIT @PageSize
Меня больше всего беспокоит то, как мне создать API и разбиение на страницы, чтобы клиент мог знать, когда будут готовы результаты. При нумерации страниц на основе курсора вы можете узнать, когда больше не следует ожидать результатов. Как я могу сказать клиенту, что они закончили? Это в основном предполагается отсутствием next_page или есть лучший подход?
В основном меня беспокоит то, что это асинхронное приложение. Клиент может запросить GET:requestId до того, как все задания @requestId будут записаны в базу данных. Мы хотим дать им то, что есть в базе по делу.
Надеюсь, мой вопрос понятен. Спасибо