Реализация разбиения на страницы для API для результатов расчета матриц

avatar
YANS
9 августа 2021 в 01:59
12
0
0

Я пытаюсь создать конечную точку 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 будут записаны в базу данных. Мы хотим дать им то, что есть в базе по делу.

Надеюсь, мой вопрос понятен. Спасибо

Источник

Ответы (0)