La risposta breve e diretta
Poiché la richiesta parla dell'esecuzione dell'elenco di attività (le attività sono la risorsa di cui stiamo parlando qui), quindi se il gruppo di attività è stato spostato in avanti all'esecuzione (ovvero, indipendentemente dal risultato dell'esecuzione), sarebbe sensato che lo stato della risposta sarà 200 OK
. Altrimenti, se si verificasse un problema che impedisce l'esecuzione del gruppo di attività, ad esempio la mancata convalida degli oggetti dell'attività o un servizio richiesto non è disponibile, ad esempio, lo stato della risposta dovrebbe indicare quell'errore. Oltre questo, quando inizia l'esecuzione delle attività, visto che le attività da eseguire sono elencate nel corpo della richiesta, mi aspetterei che i risultati dell'esecuzione vengano elencati nel corpo della risposta.
La lunga risposta filosofica
Stai vivendo questo dilemma perché stai deviando da ciò per cui è stato progettato HTTP. Non lo stai interagendo per gestire le risorse, piuttosto, lo stai usando come mezzo di invocazione del metodo remoto (che non è molto strano, tuttavia funziona male senza uno schema preconcetto).
Detto questo, e senza il coraggio di trasformare questa risposta in una lunga guida supponente, il seguente è uno schema URI conforme a un approccio di gestione delle risorse:
/tasks
GET
elenca tutte le attività, impaginate
POST
aggiunge una singola attività
/tasks/task/[id]
GET
risponde con un oggetto stato di una singola attività
DELETE
annulla / elimina un'attività
/tasks/groups
GET
elenca tutti i gruppi di attività, impaginati
POST
aggiunge un gruppo di attività
/tasks/groups/group/[id]
GET
risponde con lo stato di un gruppo di attività
DELETE
annulla / elimina il gruppo di attività
Questa struttura parla di risorse, non di cosa farne. Ciò che viene fatto con le risorse è la preoccupazione di un altro servizio.
Un altro punto importante da sottolineare è che è consigliabile non bloccare a lungo in un gestore di richieste HTTP. Proprio come l'interfaccia utente, un'interfaccia HTTP dovrebbe essere reattiva - in una scala temporale di alcuni ordini di grandezza più lenta (perché questo livello si occupa di IO).
Passare alla progettazione di un'interfaccia HTTP che gestisca rigorosamente le risorse è probabilmente difficile quanto spostare il lavoro lontano da un thread dell'interfaccia utente quando si fa clic su un pulsante. Richiede che il server HTTP comunichi con altri servizi per eseguire attività anziché eseguirle nel gestore richieste. Questa non è un'implementazione superficiale, è un cambio di direzione.
Alcuni esempi di come verrebbe utilizzato tale schema URI
Esecuzione di una singola attività e monitoraggio dell'avanzamento:
POST /tasks
con il compito da eseguire
GET /tasks/task/[id]
finché l'oggetto della risposta completed
ha un valore positivo mentre mostra lo stato / l'avanzamento correnti
Esecuzione di una singola attività e in attesa del suo completamento:
POST /tasks
con il compito da eseguire
GET /tasks/task/[id]?awaitCompletion=true
fino a quando completed
ha un valore positivo (probabilmente ha timeout, motivo per cui questo dovrebbe essere ripetuto)
Esecuzione di un gruppo di attività e monitoraggio dell'avanzamento:
POST /tasks/groups
con il gruppo di attività da eseguire
GET /tasks/groups/group/[groupId]
fino a quando la completed
proprietà dell'oggetto response ha valore, mostrando lo stato delle singole attività (3 attività completate su 5, ad esempio)
Richiesta di un'esecuzione per un gruppo di attività e in attesa del suo completamento:
POST /tasks/groups
con il gruppo di attività da eseguire
GET /tasks/groups/group/[groupId]?awaitCompletion=true
fino a quando non risponde con un risultato che indica il completamento (probabilmente ha timeout, motivo per cui dovrebbe essere ripetuto)