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 completedmemiliki 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=truehingga completedmemiliki 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 completedproperti 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)