La respuesta corta y directa
Dado que la solicitud habla de ejecutar la lista de tareas (las tareas son el recurso del que estamos hablando aquí), entonces, si el grupo de tareas se ha adelantado a la ejecución (es decir, independientemente del resultado de la ejecución), sería sensato que el estado de respuesta será 200 OK
. De lo contrario, si hubiera un problema que impidiera la ejecución del grupo de tareas, como una falla en la validación de los objetos de la tarea , o algún servicio requerido no está disponible, por ejemplo, el estado de respuesta debería indicar ese error. Después de eso, cuando comienza la ejecución de las tareas, ya que las tareas a realizar se enumeran en el cuerpo de la solicitud, entonces esperaría que los resultados de la ejecución se enumeren en el cuerpo de la respuesta.
La respuesta larga y filosófica.
Experimenta este dilema porque se está desviando de lo que HTTP fue diseñado para. No lo está interactuando para administrar recursos, más bien, lo está utilizando como medio de invocación de método remoto (lo cual no es muy extraño, pero funciona mal sin un esquema preconcebido).
Dicho lo anterior, y sin valor para convertir esta respuesta en una guía larga y obstinada, el siguiente es un esquema de URI que se ajusta a un enfoque de gestión de recursos:
/tasks
GET
enumera todas las tareas, paginado
POST
agrega una sola tarea
/tasks/task/[id]
GET
responde con un objeto de estado de una sola tarea
DELETE
cancela / elimina una tarea
/tasks/groups
GET
enumera todos los grupos de tareas, paginados
POST
agrega un grupo de tareas
/tasks/groups/group/[id]
GET
responde con el estado de un grupo de tareas
DELETE
cancela / elimina el grupo de tareas
Esta estructura habla de recursos, no de qué hacer con ellos. Lo que se está haciendo con los recursos es la preocupación de otro servicio.
Otro punto importante es que es aconsejable no bloquear durante mucho tiempo en un controlador de solicitudes HTTP. Al igual que la interfaz de usuario, una interfaz HTTP debería responder, en una escala de tiempo que es un poco más lenta (porque esta capa se ocupa de IO).
Hacer el movimiento hacia el diseño de una interfaz HTTP que administre estrictamente los recursos es probablemente tan difícil como alejar el trabajo de un hilo de la interfaz de usuario cuando se hace clic en un botón. Requiere que el servidor HTTP se comunique con otros servicios para ejecutar tareas en lugar de ejecutarlas en el controlador de solicitudes. Esta no es una implementación superficial, es un cambio de dirección.
Algunos ejemplos de cómo se usaría dicho esquema URI
Ejecutar una sola tarea y seguir el progreso:
POST /tasks
con la tarea a ejecutar
GET /tasks/task/[id]
hasta que el objeto de respuesta completed
tenga un valor positivo mientras muestra el estado / progreso actual
Ejecutando una sola tarea y esperando su finalización:
POST /tasks
con la tarea a ejecutar
GET /tasks/task/[id]?awaitCompletion=true
hasta que completed
tenga un valor positivo (es probable que tenga un tiempo de espera, por lo que esto debería repetirse)
Ejecutar un grupo de tareas y seguir el progreso:
POST /tasks/groups
con el grupo de tareas a ejecutar
GET /tasks/groups/group/[groupId]
hasta que la completed
propiedad del objeto de respuesta tenga valor, mostrando el estado de la tarea individual (3 tareas completadas de 5, por ejemplo)
Solicitar una ejecución para un grupo de tareas y esperar su finalización:
POST /tasks/groups
con el grupo de tareas a ejecutar
GET /tasks/groups/group/[groupId]?awaitCompletion=true
hasta que responda con un resultado que denote la finalización (es probable que tenga tiempo de espera, por lo que debe colocarse en bucle)