Jawaban singkat dan langsung
Karena permintaan berbicara tentang mengeksekusi daftar tugas (tugas adalah sumber yang kita bicarakan di sini), maka jika grup tugas telah dipindahkan ke depan untuk dieksekusi (yaitu, terlepas dari hasil eksekusi), maka akan masuk akal bahwa status respons akan 200 OK
. Kalau tidak, jika ada masalah yang akan mencegah eksekusi kelompok tugas, seperti gagal validasi objek tugas , atau beberapa layanan yang diperlukan tidak tersedia misalnya, maka status respons harus menunjukkan kesalahan itu. Melewati itu, ketika pelaksanaan tugas dimulai, mengingat tugas yang harus dilakukan tercantum dalam badan permintaan, maka saya akan berharap bahwa hasil eksekusi akan terdaftar di badan respons.
Panjang, jawaban filosofis
Anda mengalami dilema ini karena Anda mengalihkan dari apa HTTP dirancang untuk. Anda tidak berinteraksi untuk mengelola sumber daya, melainkan menggunakannya sebagai cara pemanggilan metode jarak jauh (yang tidak terlalu aneh, namun bekerja dengan buruk tanpa skema yang ditentukan sebelumnya).
Dengan kata-kata di atas, dan tanpa keberanian untuk mengubah jawaban ini menjadi panduan lama, berikut ini adalah skema URI yang sesuai dengan pendekatan manajemen sumber daya:
/tasks
GET
daftar semua tugas, diberi nomor halaman
POST
menambahkan satu tugas
/tasks/task/[id]
GET
merespons dengan objek keadaan tugas tunggal
DELETE
membatalkan / menghapus tugas
/tasks/groups
GET
daftar semua grup tugas, diberi nomor halaman
POST
menambahkan sekelompok tugas
/tasks/groups/group/[id]
GET
merespons dengan status grup tugas
DELETE
membatalkan / menghapus grup tugas
Struktur ini berbicara tentang sumber daya, bukan apa yang harus dilakukan dengan mereka. Apa yang dilakukan dengan sumber daya adalah masalah layanan lain.
Poin penting lain yang harus dibuat adalah disarankan untuk tidak memblokir terlalu lama dalam penangan permintaan HTTP. Sama seperti UI, antarmuka HTTP harus responsif - dalam skala waktu yang beberapa kali lipat lebih lambat (karena lapisan ini berhubungan dengan IO).
Membuat langkah ke arah merancang antarmuka HTTP yang secara ketat mengelola sumber daya mungkin sama sulitnya dengan memindahkan pekerjaan dari utas UI saat tombol diklik. Ini mengharuskan server HTTP berkomunikasi dengan layanan lain untuk menjalankan tugas daripada menjalankannya dalam penangan permintaan. Ini bukan implementasi yang dangkal, ini adalah perubahan arah.
Beberapa contoh bagaimana skema URI akan digunakan
Menjalankan satu tugas dan melacak kemajuan:
POST /tasks
dengan tugas untuk dieksekusi
GET /tasks/task/[id]
hingga objek respons completed
memiliki nilai positif sambil menunjukkan status / kemajuan saat ini
Menjalankan satu tugas dan menunggu penyelesaiannya:
POST /tasks
dengan tugas untuk dieksekusi
GET /tasks/task/[id]?awaitCompletion=true
hingga completed
memiliki nilai positif (kemungkinan memiliki batas waktu, itulah sebabnya ini harus diulang)
Menjalankan grup tugas dan melacak kemajuan:
POST /tasks/groups
dengan kelompok tugas untuk dieksekusi
GET /tasks/groups/group/[groupId]
sampai completed
properti objek respons memiliki nilai, menunjukkan status tugas individu (3 tugas diselesaikan dari 5, misalnya)
Meminta eksekusi untuk grup tugas dan menunggu penyelesaiannya:
POST /tasks/groups
dengan kelompok tugas untuk dieksekusi
GET /tasks/groups/group/[groupId]?awaitCompletion=true
sampai merespons dengan hasil yang menunjukkan penyelesaian (kemungkinan memiliki batas waktu, itulah sebabnya mengapa harus diulang)