Коротка, пряма відповідь
Оскільки запит говорить про виконання списку завдань (завдання - це той ресурс, про який ми говоримо тут), то якщо група завдань була перенесена до виконання (тобто незалежно від результату виконання), то було б розумним що статус відповіді буде 200 OK
. В іншому випадку, якщо виникла проблема, яка перешкоджала б виконанню групи завдань, наприклад, невдача перевірки об'єктів завдання , або якась необхідна служба, наприклад, недоступна, то статус відповіді повинен позначати цю помилку. Раніше, коли виконання завдань починається, розглядаючи, як завдання, які потрібно виконати, перераховані в органі запиту, то я б очікував, що результати виконання будуть вказані в органі відповіді.
Довга філософська відповідь
У вас виникає ця дилема, оскільки ви відволікаєтесь від того, для чого був розроблений HTTP. Ви не взаємодієте з ним для управління ресурсами, скоріше ви використовуєте його як засіб віддаленого виклику методу (що не дуже дивно, але погано працює без попередньо задуманої схеми).
З урахуванням вищесказаного, і без сміливості перетворити цю відповідь на довгий сумнівний посібник, наступна схема URI, яка відповідає підходу до управління ресурсами:
/tasks
GET
перелічує всі завдання, що страждають на сторінку
POST
додає єдине завдання
/tasks/task/[id]
GET
відповідає на об’єкт стану одного завдання
DELETE
скасовує / видаляє завдання
/tasks/groups
GET
перелічує всі групи завдань, що страждають на сторінки
POST
додає групу завдань
/tasks/groups/group/[id]
GET
відповідає станом групи завдань
DELETE
скасовує / видаляє групу завдань
Ця структура говорить про ресурси, а не про те, що з ними робити. Те, що робиться з ресурсами, - це турбота про іншу службу.
Ще одним важливим моментом, який слід зробити, є те, що бажано не блокувати дуже довго в обробці запиту HTTP. Подібно до UI, HTTP-інтерфейс повинен бути чуйним - у часовому масштабі, який на кілька порядків повільніше (тому що цей шар стосується IO).
Перехід до розробки інтерфейсу HTTP, який суворо керує ресурсами, швидше за все, настільки ж важкий, як і віддалення роботи від потоку інтерфейсу користувача, коли натискається кнопка. Він вимагає, щоб сервер HTTP спілкувався з іншими службами для виконання завдань, а не їх виконання в оброблювачі запитів. Це не дрібна реалізація, це зміна напрямку.
Деякі приклади використання такої схеми URI
Виконання одного завдання та відстеження прогресу:
POST /tasks
із завданням виконати
GET /tasks/task/[id]
поки об'єкт відповіді не completed
отримає позитивного значення під час показу поточного стану / прогресу
Виконання одного завдання та очікування його завершення:
POST /tasks
із завданням виконати
GET /tasks/task/[id]?awaitCompletion=true
поки не completed
отримає позитивного значення (швидше за все, має таймаут, через що це слід циклічно)
Виконання групи завдань та відстеження прогресу:
POST /tasks/groups
з групою завдань для виконання
GET /tasks/groups/group/[groupId]
поки completed
властивість об'єкта відповіді не має значення, показуючи стан індивідуального завдання (наприклад, 3 завдання, виконані з 5, наприклад)
Запит на виконання групи завдань та очікування її завершення:
POST /tasks/groups
з групою завдань для виконання
GET /tasks/groups/group/[groupId]?awaitCompletion=true
до тих пір, поки не відповідає з результатом, який позначає завершення (ймовірно, має час очікування, тому його слід петляти)