คำตอบสั้น ๆ โดยตรง
เนื่องจากคำขอพูดถึงการดำเนินการรายการงาน (งานคือทรัพยากรที่เรากำลังพูดถึงอยู่ที่นี่) ดังนั้นหากกลุ่มงานถูกย้ายไปข้างหน้าเพื่อดำเนินการ (นั่นคือไม่ว่าผลการดำเนินการจะเป็นไปได้) ก็จะสมเหตุสมผล 200 OK
ว่าสถานะการตอบสนองจะเป็น มิฉะนั้นหากมีปัญหาที่จะป้องกันไม่ให้มีการดำเนินการของกลุ่มงานเช่นการตรวจสอบความถูกต้องของวัตถุภารกิจหรือบริการที่จำเป็นบางอย่างไม่สามารถใช้งานได้เช่นสถานะการตอบกลับควรแสดงถึงข้อผิดพลาดนั้น ที่ผ่านมาเมื่อการดำเนินการของภารกิจเริ่มต้นเห็นว่าเป็นงานที่จะดำเนินการอยู่ในรายการคำขอแล้วฉันคาดว่าผลการดำเนินการจะถูกระบุไว้ในร่างกายตอบสนอง
คำตอบที่ยาวและปรัชญา
คุณกำลังประสบกับภาวะที่กลืนไม่เข้าคายไม่ออกนี้เพราะคุณเบี่ยงเบนความสนใจจากสิ่งที่ HTTP ได้รับการออกแบบมา คุณไม่ได้มีปฏิสัมพันธ์กับมันเพื่อจัดการทรัพยากร แต่คุณใช้มันเป็นวิธีการรีโมตเมธอดแบบรีโมต (ซึ่งไม่แปลกมาก แต่ทำงานได้ไม่ดีโดยไม่มีโครงร่างที่รับมาก่อน)
จากที่กล่าวมาข้างต้นและหากปราศจากความกล้าที่จะเปลี่ยนคำตอบนี้ให้เป็นแนวทางที่มีความเห็นยาว ๆ ต่อไปนี้คือโครงการ URI ที่สอดคล้องกับแนวทางการจัดการทรัพยากร:
/tasks
GET
แสดงรายการงานทั้งหมดเลขหน้า
POST
เพิ่มงานเดียว
/tasks/task/[id]
GET
ตอบสนองด้วยวัตถุสถานะของงานเดียว
DELETE
ยกเลิก / ลบงาน
/tasks/groups
GET
แสดงรายการกลุ่มงานทั้งหมดแบ่งหน้า
POST
เพิ่มกลุ่มของงาน
/tasks/groups/group/[id]
GET
ตอบสนองด้วยสถานะของกลุ่มงาน
DELETE
ยกเลิก / ลบกลุ่มงาน
โครงสร้างนี้พูดคุยเกี่ยวกับทรัพยากรไม่ใช่เกี่ยวกับพวกเขา สิ่งที่กำลังทำอยู่กับทรัพยากรคือความกังวลของบริการอื่น
ประเด็นสำคัญอีกข้อหนึ่งที่ควรทำคือไม่แนะนำให้บล็อกในตัวจัดการคำร้องขอ HTTP เป็นเวลานาน เช่นเดียวกับ UI อินเตอร์เฟส HTTP ควรตอบสนอง - ในช่วงเวลาที่มีขนาดของการสั่งซื้อช้าลงเล็กน้อย (เนื่องจากเลเยอร์นี้เกี่ยวข้องกับ IO)
การย้ายไปสู่การออกแบบอินเตอร์เฟส HTTP ที่จัดการทรัพยากรอย่างเข้มงวดนั้นอาจเป็นเรื่องยากเหมือนกับการย้ายงานออกจากเธรด UI เมื่อมีการคลิกปุ่ม มันต้องการให้เซิร์ฟเวอร์ HTTP สื่อสารกับบริการอื่น ๆ เพื่อดำเนินงานแทนการดำเนินการในการจัดการการร้องขอ นี่ไม่ใช่การใช้งานแบบตื้น แต่เป็นการเปลี่ยนทิศทาง
ตัวอย่างบางส่วนของวิธีการใช้รูปแบบ URI ดังกล่าว
การดำเนินงานเดียวและความคืบหน้าการติดตาม:
POST /tasks
กับงานที่จะดำเนินการ
GET /tasks/task/[id]
จนกว่าวัตถุตอบกลับcompleted
จะมีค่าเป็นบวกในขณะที่แสดงสถานะ / ความคืบหน้าในปัจจุบัน
ดำเนินงานเดียวและรอความสำเร็จ:
POST /tasks
กับงานที่จะดำเนินการ
GET /tasks/task/[id]?awaitCompletion=true
จนกว่าจะcompleted
มีค่าเป็นบวก (น่าจะหมดเวลาซึ่งเป็นเหตุผลว่าทำไมจึงควรวนซ้ำ)
การดำเนินงานกลุ่มงานและความคืบหน้าการติดตาม:
POST /tasks/groups
กับกลุ่มของงานที่จะดำเนินการ
GET /tasks/groups/group/[groupId]
จนกว่าcompleted
คุณสมบัติของวัตถุตอบกลับจะมีค่าแสดงสถานะงานแต่ละงาน (ตัวอย่างเช่น 3 งานจาก 5 รายการ)
การร้องขอการเรียกใช้งานสำหรับกลุ่มงานและรอให้การดำเนินการเสร็จสิ้น:
POST /tasks/groups
กับกลุ่มของงานที่จะดำเนินการ
GET /tasks/groups/group/[groupId]?awaitCompletion=true
จนกว่าจะตอบกลับด้วยผลลัพธ์ที่แสดงว่าเสร็จสิ้น (น่าจะหมดเวลาซึ่งเป็นเหตุผลว่าทำไมจึงควรวนซ้ำ)