संक्षिप्त, सीधा उत्तर
चूंकि अनुरोध कार्यों की सूची को निष्पादित करने की बात करता है (कार्य वह संसाधन हैं जो हम यहां बोल रहे हैं), फिर यदि कार्य समूह को निष्पादन के लिए आगे बढ़ाया गया है (अर्थात, निष्पादन परिणाम की परवाह किए बिना), तो यह समझदार होगा कि प्रतिक्रिया की स्थिति होगी 200 OK। अन्यथा, यदि कोई समस्या थी जो कार्य समूह के निष्पादन को रोकती है, जैसे कि कार्य वस्तुओं का सत्यापन विफल होना , या कुछ आवश्यक सेवा उदाहरण के लिए उपलब्ध नहीं है, तो प्रतिक्रिया की स्थिति को उस त्रुटि को निरूपित करना चाहिए। विगत कि, जब कार्यों का निष्पादन शुरू होता है, प्रदर्शन करने के कार्यों के रूप में अनुरोध निकाय में सूचीबद्ध होते हैं, तो मैं उम्मीद करूंगा कि निष्पादन परिणाम प्रतिक्रिया निकाय में सूचीबद्ध होंगे।
लंबा, दार्शनिक जवाब
आप इस दुविधा का अनुभव कर रहे हैं क्योंकि आप उस HTTP से विचलन कर रहे हैं जो HTTP के लिए डिज़ाइन किया गया था। आप इसे संसाधनों का प्रबंधन करने के लिए बातचीत नहीं कर रहे हैं, बल्कि, आप इसे दूरस्थ विधि मंगलाचरण के रूप में उपयोग कर रहे हैं (जो बहुत अजीब नहीं है, लेकिन बिना पूर्व-निर्धारित योजना के खराब काम करता है)।
ऊपर कहा जा रहा है, और साहस के बिना इस जवाब को एक लंबी राय वाले गाइड में बदलने के लिए, निम्नलिखित एक यूआरआई योजना है जो एक संसाधन प्रबंधन दृष्टिकोण के अनुरूप है:
/tasks
GET सभी कार्यों को सूचीबद्ध करता है
POST एकल कार्य जोड़ता है
/tasks/task/[id]
GET किसी एक कार्य की राज्य वस्तु के साथ प्रतिक्रिया करता है
DELETE किसी कार्य को रद्द / हटा देता है
/tasks/groups
GET सभी कार्य समूहों को सूचीबद्ध करता है
POST कार्यों का एक समूह जोड़ता है
/tasks/groups/group/[id]
GET एक कार्य समूह की स्थिति के साथ प्रतिक्रिया करता है
DELETE कार्य समूह को रद्द / हटा देता है
यह संरचना संसाधनों के बारे में बात करती है, न कि उनके साथ क्या करना है। संसाधनों के साथ जो किया जा रहा है वह दूसरी सेवा की चिंता है।
एक और महत्वपूर्ण बिंदु यह है कि HTTP अनुरोध हैंडलर में बहुत लंबे समय तक ब्लॉक न करने की सलाह दी जाती है। यूआई की तरह, एक 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संपत्ति का मूल्य नहीं है, व्यक्तिगत कार्य स्थिति दिखा रहा है (उदाहरण के लिए 5 में से 3 कार्य पूरे हो चुके हैं)
किसी कार्य समूह के लिए निष्पादन का अनुरोध करना और उसके पूरा होने की प्रतीक्षा करना:
POST /tasks/groups निष्पादित करने के लिए कार्यों के समूह के साथ
GET /tasks/groups/group/[groupId]?awaitCompletion=true जब तक पूरा होने वाले परिणाम का जवाब नहीं दिया जाता (तब तक समय समाप्त हो चुका होता है, इसीलिए लूप किया जाना चाहिए)