«просто иметь GET вернуть то, что доступно в то время», имеет массу смысла. За исключением случаев, когда они опрашивают, вы не хотите продолжать возвращать то, что они уже знают. Ответы становятся длиннее при каждом опросе.
Вам нужно, чтобы они предоставили вам "то, что я видел до сих пор" в запросе GET. Это дает вам идемпотентность. Если они просят кусок 1, они всегда получают один и тот же ответ. Как только они увидят кусок 1, они могут попросить кусок 2.
Ответ не становится больше. Больше частей становятся доступными. GET «на уровне коллекции» обеспечивает размер ответа. У вас есть GET "на уровне детализации" для каждой части, которая доступна.
По сути, это алгоритм, подобный подтверждению TCP / IP. Когда они получают кусок, вы отправляете следующий кусок. Если есть следующий кусок, в противном случае вы отправляете 200 новых сообщений для отчета.
«Проблема в том, что клиент знает, когда мы наконец закончим», не поддается решению. Они не могут знать, и вы не можете предсказать, сколько времени это займет.
Вы не хотите, чтобы они выполняли "занятое ожидание" - опрос, чтобы убедиться, что вы уже закончили - это довольно большая нагрузка на ваш сервер. Если они нетерпеливы. Вы можете задушить их запросы. Вы можете отправить им «чек обратно за х секунд», где х становится все больше.
Вы даже можете использовать алгоритм планировщика в стиле Unix, где их оценка уменьшается, когда они опрашивают, и повышаются, если они не опрашивают в течение X секунд.
Альтернативой является какая-то очередь, в которой вы отправляете результаты обратно им.
Чтобы сделать это, им нужно будет предоставить URI, который вы можете POST сообщить им, что все готово.
Или они используют Atom для облегченной архитектуры опроса. В то время как Atom кажется сложным - и все еще включает опрос - вы предоставляете минимальный ответ Atom («еще не изменен») до тех пор, пока не закончите, когда вы предоставите («новые результаты»), чтобы они могли сделать реальный тяжеловес получить. Это для «все или ничего», вместо метода инкрементного ответа, описанного выше.
Вы также можете думать о GET «на уровне коллекции» как о своем статусе Atom в процессе в целом.