REST (REpresentational State Transfer) изначально проектировался для синхронного обмена данными, но иногда требуется асинхронное взаимодействие — например, для выполнения долгих операций или обработки задач в фоне. Разберем, как это работает и на что обратить внимание. Клиент отправляет запрос на сервер, чтобы запустить длительную операцию (например, генерацию отчета).
Пример запроса: POST /api/reports
Content-Type: application/json
{ "type": "sales", "period": "2023" } Сервер не блокирует клиента, а сразу отвечает: {
"status": "accepted",
"task_id": "12345",
"status_url": "/api/reports/status/12345"
} Клиент периодически опрашивает status_url, чтобы узнать результат: GET /api/reports/status/12345 Ответы сервера: Когда задача завершена, клиент запрашивает данные по result_url. {
"type": "sales",
"callback_url": "https://client.com/api/results"
} Четко определите возможные статусы: Возвращайте клиенту progress в процентах или этапах, чтобы улучшить UX. POST