Die kurze, direkte Antwort
Da die Anforderung von der Ausführung der Aufgabenliste spricht (Aufgaben sind die Ressource, von der wir hier sprechen), ist es sinnvoll, wenn die Aufgabengruppe zur Ausführung verschoben wurde (dh unabhängig vom Ausführungsergebnis) dass der Antwortstatus sein wird 200 OK
. Wenn andernfalls ein Problem aufgetreten ist, das die Ausführung der Aufgabengruppe verhindert, z. B. ein Fehler bei der Validierung der Aufgabenobjekte , oder ein erforderlicher Dienst nicht verfügbar ist, sollte der Antwortstatus diesen Fehler anzeigen. Wenn die Ausführung der Tasks beginnt, da die auszuführenden Tasks im Anforderungshauptteil aufgeführt sind, würde ich davon ausgehen, dass die Ausführungsergebnisse im Antworthauptteil aufgeführt werden.
Die lange, philosophische Antwort
Dieses Dilemma tritt auf, weil Sie von dem abweichen, für das HTTP entwickelt wurde. Sie interagieren nicht mit ihm, um Ressourcen zu verwalten, sondern verwenden ihn als Mittel zum Aufrufen von Remotemethoden (was nicht sonderbar ist, jedoch ohne ein vorgefasstes Schema schlecht funktioniert).
Mit dem oben Gesagten und ohne den Mut, diese Antwort in einen langmeinenden Leitfaden zu verwandeln, ist das Folgende ein URI-Schema, das einem Ressourcenmanagement-Ansatz entspricht:
/tasks
GET
listet alle Aufgaben auf, paginiert
POST
Fügt eine einzelne Aufgabe hinzu
/tasks/task/[id]
GET
antwortet mit dem Statusobjekt einer einzelnen Aufgabe
DELETE
bricht eine Aufgabe ab oder löscht sie
/tasks/groups
GET
listet alle Aufgabengruppen auf, paginiert
POST
Fügt eine Gruppe von Aufgaben hinzu
/tasks/groups/group/[id]
GET
antwortet mit dem Status einer Aufgabengruppe
DELETE
Löscht / löscht die Aufgabengruppe
In dieser Struktur geht es um Ressourcen, nicht darum, was man mit ihnen machen soll. Was mit Ressourcen gemacht wird, ist das Anliegen eines anderen Dienstes.
Ein weiterer wichtiger Punkt ist, dass es ratsam ist, in einem HTTP-Request-Handler nicht zu lange zu blockieren. Ähnlich wie bei der Benutzeroberfläche sollte eine HTTP-Schnittstelle reagieren - in einem Zeitrahmen, der um einige Größenordnungen langsamer ist (da sich diese Schicht mit E / A befasst).
Der Schritt zum Entwerfen einer HTTP-Schnittstelle, mit der Ressourcen streng verwaltet werden, ist wahrscheinlich so schwierig wie das Entfernen der Arbeit von einem UI-Thread, wenn auf eine Schaltfläche geklickt wird. Es ist erforderlich, dass der HTTP-Server mit anderen Diensten kommuniziert, um Aufgaben auszuführen, anstatt sie im Anforderungshandler auszuführen. Dies ist keine flache Implementierung, sondern eine Richtungsänderung.
Einige Beispiele für die Verwendung eines solchen URI-Schemas
Ausführen einer einzelnen Aufgabe und Verfolgen des Fortschritts:
POST /tasks
mit der auszuführenden Aufgabe
GET /tasks/task/[id]
bis das Antwortobjekt completed
einen positiven Wert hat und gleichzeitig den aktuellen Status / Fortschritt anzeigt
Eine einzelne Aufgabe ausführen und auf ihren Abschluss warten:
POST /tasks
mit der auszuführenden Aufgabe
GET /tasks/task/[id]?awaitCompletion=true
till completed
hat einen positiven Wert (wahrscheinlich hat es ein Timeout, weshalb dies eine Schleife sein sollte)
Ausführen einer Aufgabengruppe und Verfolgen des Fortschritts:
POST /tasks/groups
mit der Gruppe der auszuführenden Aufgaben
GET /tasks/groups/group/[groupId]
bis die completed
Eigenschaft des Antwortobjekts einen Wert hat, der den Status der einzelnen Aufgabe anzeigt (3 von beispielsweise 5 Aufgaben erledigt)
Anfordern einer Ausführung für eine Aufgabengruppe und Warten auf deren Fertigstellung:
POST /tasks/groups
mit der Gruppe der auszuführenden Aufgaben
GET /tasks/groups/group/[groupId]?awaitCompletion=true
bis antwortet mit einem Ergebnis, das den Abschluss anzeigt (wahrscheinlich hat es eine Zeitüberschreitung, weshalb eine Schleife ausgeführt werden sollte)