Мы внедряем REST API, который будет запускать несколько длинных backend-задач. Я читал Поваренную книгу веб-служб RESTful, и рекомендация - вернуть HTTP 202/Accepted с заголовком Content-Location, указывающим на обрабатываемую задачу. (например, http://www.example.org/orders/tasks/1234), и попросите клиента опросить этот URI для обновления в долгосрочной перспективе.
Идея состоит в том, чтобы API REST сразу же отправил сообщение в очередь, с ролью рабочего стола, которая собирала сообщение из очереди и разворачивала несколько задач backend, также используя очереди. Проблема, которую я вижу при таком подходе, заключается в том, как назначить уникальный идентификатор задаче, а затем позволить клиенту запросить статус задачи, выдав GET в URI Content-Location.
Если REST API немедленно отправляется в очередь, он может генерировать GUID и присоединяться к нему как к атрибуту сообщения, добавляемого в очередь, но получение статуса запроса становится неудобным.
Другим вариантом было бы, чтобы REST API сразу добавлял запись в базу данных (пусть, заказ, с новым идентификатором заказа), с начальным статусом, а затем затем помещал сообщение в очередь для запуска задних задач, который впоследствии будет обновлять эту запись базы данных. API вернет этот новый идентификатор заказа в URI заголовка Content-Location, который клиент будет использовать при проверке состояния задачи.
Как-то сначала добавляя запись в базу данных, а затем добавление сообщения в очередь кажется обратным, но только добавление запроса в очередь затрудняет отслеживание прогресса.
Каким будет рекомендуемый подход?
Большое спасибо за ваши идеи.