2011-12-08 21 views
8

मैं आरपीसी दुनिया से आ रहा हूं लेकिन वर्तमान में जांच कर रहा हूं कि आरईएसटी का उपयोग करना मेरे प्रोजेक्ट के लिए एक अच्छा विचार है। जैसा कि मैं Wikipedia से समझता हूं, रिकस्ट सेवाओं का मूल विचार संग्रह और उनके व्यक्तिगत तत्वों तक पहुंच प्रदान करना है।एक विश्वसनीय सिंगलटन संसाधन

मेरे मामले में सर्वर एक मापने वाला उपकरण होगा। मैं मापन दिनचर्या शुरू करने, रोकने और रोकने में सक्षम होना चाहिए, और किसी भी समय डेटा को पढ़ना चाहिए।

वर्तमान में, मैं निम्नलिखित पर विचार कर रहा हूँ:

  • पोस्ट/उपाय (माप शुरू करते हैं, यह जारी रहता है जब तक उपयोगकर्ता द्वारा रोका गया)
  • PUT/उपाय ठहराव = सही/गलत (ठहराव/फिर से चलाने)
  • DELETE/उपाय (बंद)
  • प्राप्त/उपाय (माप डेटा प्राप्त करें)

हालांकि, मुझे यकीन नहीं है कि यह आरईएसटी मॉडल फिट बैठता है, क्योंकि मैं वास्तव में यहां संग्रह या तत्वों के साथ काम नहीं करता हूं।

मेरा प्रश्न: मैं सिंगलटन संसाधन का उपयोग कैसे करूं और सर्वर को स्टार्ट/स्टॉप अनुरोधों को रीस्टफुल स्टेटलेस बाधा तोड़ सकता हूं?

+0

मेरी राय में http://programmers.stackexchange.com से संबंधित है, क्योंकि यह एक डिज़ाइन प्रश्न है। – Romain

उत्तर

1

आप अभी भी संसाधन पर काम कर रहे हैं, और जिस तरह से आपने इसे तोड़ दिया है, वह मेरे लिए अच्छा लगता है। स्पष्ट रूप से क्षेत्ररक्षण REST chapter में temporaral सेवाओं का उल्लेख है:

बाकी हिस्सों में जानकारी के प्रमुख अमूर्त एक संसाधन है। किसी भी जानकारी है कि एक संसाधन हो सकता है नामित किया जा सकता है: एक दस्तावेज़ या छवि, एक अस्थायी सेवा (उदाहरण के लिए "लॉस एंजिल्स में आज के मौसम")

शायद यह मतलब होगा कि प्रत्येक माप की एक विशेष आईडी देने के लिए । इस तरह आप प्रत्येक माप को विशिष्ट रूप से संदर्भित कर सकते हैं (आपको पुराने लोगों को भी स्टोर करने की ज़रूरत नहीं है, लेकिन अगर कोई पुरानी माप को संदर्भित करता है तो आप उन्हें बता सकते हैं कि वे जो भी अनुरोध कर रहे हैं वह अब तक अद्यतित नहीं है)।

+0

लगता है कि मैं सही रास्ते पर हूं। हालांकि, मेरे आवेदन को मशीन की वर्तमान स्थिति को नियंत्रित करने और प्रतिबिंबित करने की आवश्यकता है (यानी मापने, या मापने), लेकिन यह तब कोई समस्या नहीं हो सकती है। – Sundae

+0

आईडी यह भी दर्शा सकती है कि आप क्या माप रहे हैं (उदा। मौसम/ला)। लेकिन मैं कहूंगा कि आप इसे अभी जिस तरह से रखते हैं उसे रख सकते हैं। वह एपीआई पहले से ही कई अन्य लोगों की तुलना में अधिक विश्वसनीय है जो होने का दावा करते हैं। – Daff

1

अंतिम उत्तर पर बिल्डिंग। यहाँ कैसे आप इसे तोड़ने के लिए नीचे चाहते हो सकता है है

  • उपायों/- साधन से सभी उपायों (पृष्ठ पर अंक लगाना/सीमा यदि क्वेरी पैरामीटर के आधार पर आवश्यक)
  • उपायों प्राप्त /: measure_id - एक विशेष उपाय प्राप्त
  • उपाय/- पोस्ट - एक नया उपाय शुरू करता है। यह नई माप आईडी देता है जिसे आप बाद में सौदा कर सकते हैं।
  • उपायों /: माप_आईडी - हटाएं - माप को रोकें।
  • उपायों /: माप_आईडी - पुट - माप
  • उपाय/last_measure - अंतिम मापा संसाधन।
+0

लगता है कि मैं इसे कैसे करूँगा। दुर्भाग्य से उपकरण किसी भी डेटा को स्टोर नहीं कर सकता है, इसलिए एक माप आईडी केवल मुझे लगता है कि वर्तमान माप को इंगित करेगा। – Sundae

7

नहीं RESTful

नहीं है, अपने दृष्टिकोण नहीं शोकहारा, क्योंकि अगर मैं कार्यप्रवाह समझते हैं, आप माप रोकना होगा और फिर अंतिम परिणाम को पढ़ने के लिए संसाधन प्राप्त करने के लिए संसाधन को नष्ट होता है। लेकिन संसाधन को हटाने का तात्पर्य है कि GET पर कुछ भी नहीं छोड़ा जाएगा।

तथ्य यह है कि आपका संसाधन एक सिंगलटन एक समस्या नहीं है। समस्या आप जिस तरह से क्रियाओं और राज्य का मानचित्रण कर रहे हैं उसमें निहित है।

आपका विवरण थोड़ा सा सार है, तो चलिए थोड़ा और ठोस बनें: आइए मान लें कि प्रश्न में उपकरण रेडियंस/सेक में फ्लाई व्हील की कोणीय वेग को मापता है। इस उपकरण में माप के साथ जुड़ी कुछ लागत है, इसलिए ग्राहक को लागत-बचत उपाय के रूप में कुछ समय के लिए माप को अक्षम करने में सक्षम होना चाहिए। यदि यह आपके परिदृश्य के लगभग समान है, तो नीचे दिया गया प्रदर्शन आपके परिदृश्य पर लागू होना चाहिए।

क्रिया

अब, अपने क्रियाओं की समीक्षा करें।

GET संसाधन का प्रतिनिधित्व देता है। तो जब आप GET /measure, तो उसे कुछ डेटा वापस करना चाहिए जो वर्तमान माप का प्रतिनिधित्व करता है।

PUT एक विशिष्ट, नामित संसाधन बनाता है या अद्यतन करता है। संसाधन का नाम इसके यूआरएल द्वारा किया गया है। तो PUT /measure का तात्पर्य है कि आप /measure नामक संसाधन की स्थिति अपडेट कर रहे हैं, या उस संसाधन को बना रहे हैं यदि यह पहले से मौजूद नहीं है। आपके मामले में, उपकरण मान केवल पढ़ने के लिए है: हम उपकरण के लिए एक रेडियन/सेकंड मान नहीं लिख सकते हैं। लेकिन उपकरण के रोके गए/सक्रिय राज्य उत्परिवर्तनीय है, इसलिए PUT /measure में उस शरीर को शामिल करना चाहिए जो राज्य उपकरण के संशोधित करता है। आप यहां कई अलग-अलग प्रस्तुतिकरणों का उपयोग कर सकते हैं, लेकिन यह संकेत देने के लिए कि एक उपकरण का नया राज्य होना चाहिए, यह इंगित करने के लिए active=true या active=false जैसे एक अनुरोध निकाय होगा।

POSTPUT के समान है, सिवाय इसके कि ग्राहक उस संसाधन का नाम निर्दिष्ट नहीं करता है जिसे बनाया या अपडेट किया जाना चाहिए। एक अलग एपीआई में, उदाहरण के लिए, क्लाइंट एक नया लेख बनाने के लिए 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 का उपयोग नहीं करना चाहिए।

संबंधित मुद्दे