नहीं RESTful
नहीं है, अपने दृष्टिकोण नहीं शोकहारा, क्योंकि अगर मैं कार्यप्रवाह समझते हैं, आप माप रोकना होगा और फिर अंतिम परिणाम को पढ़ने के लिए संसाधन प्राप्त करने के लिए संसाधन को नष्ट होता है। लेकिन संसाधन को हटाने का तात्पर्य है कि GET
पर कुछ भी नहीं छोड़ा जाएगा।
तथ्य यह है कि आपका संसाधन एक सिंगलटन एक समस्या नहीं है। समस्या आप जिस तरह से क्रियाओं और राज्य का मानचित्रण कर रहे हैं उसमें निहित है।
आपका विवरण थोड़ा सा सार है, तो चलिए थोड़ा और ठोस बनें: आइए मान लें कि प्रश्न में उपकरण रेडियंस/सेक में फ्लाई व्हील की कोणीय वेग को मापता है। इस उपकरण में माप के साथ जुड़ी कुछ लागत है, इसलिए ग्राहक को लागत-बचत उपाय के रूप में कुछ समय के लिए माप को अक्षम करने में सक्षम होना चाहिए। यदि यह आपके परिदृश्य के लगभग समान है, तो नीचे दिया गया प्रदर्शन आपके परिदृश्य पर लागू होना चाहिए।
क्रिया
अब, अपने क्रियाओं की समीक्षा करें।
GET
संसाधन का प्रतिनिधित्व देता है। तो जब आप GET /measure
, तो उसे कुछ डेटा वापस करना चाहिए जो वर्तमान माप का प्रतिनिधित्व करता है।
PUT
एक विशिष्ट, नामित संसाधन बनाता है या अद्यतन करता है। संसाधन का नाम इसके यूआरएल द्वारा किया गया है। तो PUT /measure
का तात्पर्य है कि आप /measure
नामक संसाधन की स्थिति अपडेट कर रहे हैं, या उस संसाधन को बना रहे हैं यदि यह पहले से मौजूद नहीं है। आपके मामले में, उपकरण मान केवल पढ़ने के लिए है: हम उपकरण के लिए एक रेडियन/सेकंड मान नहीं लिख सकते हैं। लेकिन उपकरण के रोके गए/सक्रिय राज्य उत्परिवर्तनीय है, इसलिए PUT /measure
में उस शरीर को शामिल करना चाहिए जो राज्य उपकरण के संशोधित करता है। आप यहां कई अलग-अलग प्रस्तुतिकरणों का उपयोग कर सकते हैं, लेकिन यह संकेत देने के लिए कि एक उपकरण का नया राज्य होना चाहिए, यह इंगित करने के लिए active=true
या active=false
जैसे एक अनुरोध निकाय होगा।
POST
PUT
के समान है, सिवाय इसके कि ग्राहक उस संसाधन का नाम निर्दिष्ट नहीं करता है जिसे बनाया या अपडेट किया जाना चाहिए। एक अलग एपीआई में, उदाहरण के लिए, क्लाइंट एक नया लेख बनाने के लिए POST /articles
हो सकता है। सर्वर एक संसाधन बनाएगा और इसे /articles/1234
जैसे नाम देगा और फिर यह ग्राहक को 201 CREATED
HTTP कोड लौटकर और Location: /articles/1234
हेडर जोड़कर इस नए नाम के बारे में बताएगा कि क्लाइंट को नया संसाधन कहां है। आपके परिदृश्य में, POST
एक सार्थक क्रिया नहीं है क्योंकि आप हमेशा जानते हैं कि आपके सिंगलटन संसाधन का नाम क्या है।
DELETE
का अर्थ है कि आप संसाधन को हटाते हैं, और चूंकि किसी संसाधन द्वारा संसाधन की पहचान की जाती है, DELETE /measure
का तात्पर्य है कि /measure
अब मौजूद नहीं है। बाद में GET /measure
को 404 NOT FOUND
या 410 GONE
वापस करना चाहिए। आपके मामले में, ग्राहक वास्तव में उपकरण को नष्ट नहीं कर सकता है, इसलिए DELETE
सार्थक क्रियात्मक अर्थपूर्ण नहीं है।
निष्कर्ष
तो राशि में, आपकी सेवा के लिए एक RESTful डिजाइन एक अनुरोध शरीर है कि साधन चाहे वह सक्रिय या सक्रिय नहीं होना चाहिए बताता है साथ PUT /measure
के लिए होगा (रोका गया) और GET /measure
वर्तमान माप पढ़ने के लिए ।यदि आप रोके गए उपकरण पर GET /measure
पर हैं, तो आपको शायद 409 CONFLICT
HTTP स्थिति वापस करनी चाहिए। आपकी सेवा POST
या DELETE
का उपयोग नहीं करना चाहिए।
मेरी राय में http://programmers.stackexchange.com से संबंधित है, क्योंकि यह एक डिज़ाइन प्रश्न है। – Romain