คำตอบสั้น ๆ โดยตรง
เนื่องจากคำขอพูดถึงการดำเนินการรายการงาน (งานคือทรัพยากรที่เรากำลังพูดถึงอยู่ที่นี่) ดังนั้นหากกลุ่มงานถูกย้ายไปข้างหน้าเพื่อดำเนินการ (นั่นคือไม่ว่าผลการดำเนินการจะเป็นไปได้) ก็จะสมเหตุสมผล 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 จนกว่าจะตอบกลับด้วยผลลัพธ์ที่แสดงว่าเสร็จสิ้น (น่าจะหมดเวลาซึ่งเป็นเหตุผลว่าทำไมจึงควรวนซ้ำ)