Похоже, вам нужно реализовать одну конечную точку REST, работающую следующим образом:
При первом запросе запускается фоновое задание для генерации отчета.
A JSON возвращается ответ, указывающий, что запрос на генерацию отчета был запрошен.
Если фоновое задание еще не выполнено, последующий запрос вернет ответ JSON, указывающий на процесс создания отчета. Если возможно, индикатор ответа (например, 25%
) может быть включен в ответ.
Если фоновое задание не выполнено, последующие запросы будут возвращать ответ JSON, указывающий на причину сбоя.
В противном случае последующие запросы будут возвращать сгенерированный отчет с соответствующими Content-Type
.
Теперь для важной части: Все запросы должны включать Accept
список заголовков оба application/json
и один или несколько поддерживаемых форматов отчетов (например, application/pdf
, text/csv
), в противном случае 406 Not Acceptable
Значения качества (;q=
) могут использоваться для указания предпочтения формата отчета.
Поскольку разные клиенты могут хотеть один и тот же отчет в разных форматах, сервер должен поддержка создания нескольких файлов отчетов.
Например, если запрос получен с Accept: application/pdf, application/json;q=0.1
, система начнет генерировать PDF. Если другой запрос получен с Accept: text/csv, application/json;q=0.1
, система начнет генерировать файл CSV, параллельно или в очереди.
Последующие запросы будут игнорировать ожидающие / завершенные отчеты, которые не являются приемлемыми. например, если третий запрос получен с Accept: text/csv;q=0.5, application/pdf, application/json;q=0.1
, система начнет генерировать файл CSV, система вернет ответ о статусе генерации PDF или загрузит PDF, если он завершен.