2009-01-10 22 views
5

ढूंढने के लिए आरईएसटी इंटरफेस मान लीजिए कि मैं संख्याओं की सूची का औसत खोजने के लिए एक आरईएसटी इंटरफ़ेस बनाना चाहता हूं। मान लें कि संख्याएं एक समय में सबमिट की जाती हैं। आप यह कैसे करेंगे?औसत

  1. पोस्ट http://site.com/api/average
  2. इस पहले नंबर एक हैश http://site.com/api/average/hash ....
  3. को लौटा दी जाएगी
  4. पोस्ट एक नंबर http://site.com/api/average/hash प्राप्त औसत
  5. को मिल रहा है, तो के लिए एक नंबर http://site.com/api/average/hash हटाएं क्योंकि हमें इसकी आवश्यकता नहीं है

क्या यह सही है ऐसा करने का तरीका? कोई सुझाव?

+0

क्या आप थोड़ा और संदर्भ दे सकते हैं? जैसे, प्रेषण के लिए आप किस प्रोग्रामिंग भाषा का उपयोग कर रहे हैं? –

+0

प्रोग्रामिंग भाषा की पसंद आरईएसटी एपीआई डिजाइन को जरूरी नहीं है। –

उत्तर

7

संसाधनों के रूप में संख्याओं की सूची के बारे में सोचने के लिए और अधिक समझदारी होती है। मान लें कि प्रत्येक सूची का संसाधन URL /list/{id} है जहां {id} सूची आईडी के लिए प्लेसहोल्डर है। तब:

  1. POST /list एक नई सूची बनाता है, सर्वर एक सूची आईडी उत्पन्न करता है (या 'हैश') और प्रतिक्रिया के Location शीर्षक में /list/{id} यूआरएल निर्दिष्ट करता है।
  2. POST /list/{id}
  3. GET /list/{id}/average रिटर्न औसत
  4. DELETE /list/{id} सूची हटाता सूची में एक नंबर कहते हैं।

GET /list/{id}/average के लिए एक वैकल्पिक GET /list/{id} के लिए होगा संरचित डेटा, उदा सूची वापस जाने के लिए एक्सएमएल, जिसमें एक उत्पन्न संपत्ति के रूप में औसत शामिल है।

+0

एक अच्छा जवाब जैसा प्रतीत होता है, लेकिन जब सेवा भूल जाती है तो {id} को हटाने के लिए सेवा कब या कैसे तय की जानी चाहिए? – kenny

+0

व्यक्तिगत रूप से, मैं दिन में एक बार 'पुरानी' सूचियों को हटाने के लिए बस एक टाइमर कार्य सेट अप करता हूं। जब तक सूचियां बहुत बड़ी या लगातार न हों, तो आप एक वर्ष के मूल्य को स्टोर करने में सक्षम हो सकते हैं। –

-1

बाकी दर्शन अधिकतम करने के लिए मुझे क्या करना होगा निम्नलिखित

एक PUT क्या यह एक नई संरचना है कि एक हैश उत्पन्न होगा इंगित करने के लिए, कि नहीं संख्या पारित कर दिया पर आधारित है। बस एक "यादृच्छिक" हैश। फिर प्रत्येक आगामी पोस्ट में आईडी-हैश को भेजे गए नंबरों के रिटर्न परिणाम हैश शामिल होंगे। फिर जब उस पर एक प्रस्तुति प्रस्तुत की जाती है तो आप परिणाम कैश कर सकते हैं।

1. PUT /api/average/{number} //return id-hash 
2. POST /api/average/{id-hash}/{number} // return average-hash 
3. GET /api/average/{average-hash} 
4. DELETE /api/average/{id-hash} 

तो फिर तुम औसत हैश की बात को कैश कर सकते हैं, भले ही आप एक अलग तरह से परिणाम के लिए मिल सकता है, या अलग अलग सर्वरों ही औसत कि मिलता है।

0

आप किस बारे में बात कर रहे हैं प्रतिक्रिया प्रतिक्रिया (संख्या संख्या) में एक अनुरोध प्रतिनिधित्व (संख्याओं की सूची) का एक स्टेटलेस परिवर्तन कर रहा है।

अपने संसाधन को वर्गीकृत करने देता है:

  • स्टेटलेस - अनुरोध राज्यविहीन है, लेकिन इतना संसाधन है। यह आपके अनुरोध को लेने, इसे संसाधित करने और किसी आंतरिक स्थिति को बनाए रखने के बिना प्रतिक्रिया वापस करने में सक्षम होना चाहिए। नीचे और चर्चा।
  • कैशबल होने की संभावना नहीं है - मैं यहां एक धारणा बना रहा हूं कि संख्याओं की आपकी सूची कभी-कभी समान नहीं होती है।
  • बेवकूफ - अनुरोधों का कोई साइड इफेक्ट नहीं है।ऐसा इसलिए है क्योंकि संसाधन स्टेटलेस है।

अब की जांच अलग HTTP विधियों करने देता है:

  • प्राप्त करें - एक संसाधन के राज्य हो जाता है। चूंकि आपके संसाधन में कोई राज्य नहीं है, इसलिए यह आपकी स्थिति के लिए उपयुक्त नहीं है। (idempotent, cacheable)
  • हटाएं - संसाधन हटा देता है या अपने राज्य को साफ़ करता है। आपकी स्थिति के लिए भी उपयुक्त नहीं है। (idempotent नहीं, cacheable नहीं)
  • PUT - संसाधन की स्थिति निर्धारित करने के लिए प्रयुक्त (या यदि यह अस्तित्व में नहीं है तो इसे बनाएं)। (idempotent, cacheable नहीं)
  • POST - संसाधनों की स्थिति को संशोधित या संशोधित करने वाले अनुरोधों को संसाधित करने के लिए प्रयुक्त होता है। अन्य संसाधन बना सकते हैं।

- (idempotence की कोई गारंटी नहीं है कि क्या संसाधन स्टेटफुल या, राज्यविहीन संचित करने योग्य नहीं है पर निर्भर करता है) आप अन्य उत्तर में देखते हैं के रूप में, पोस्ट सबसे लोकप्रिय 'बनाने' के लिए एक पर्याय के रूप में प्रयोग किया जाता है। हालांकि यह ठीक है, पोस्ट केवल आरईएसटी में 'बनाने' तक ही सीमित नहीं है। मार्क बेकर इसे यहां समझाए जाने का अच्छा काम करता है: http://www.markbaker.ca/2001/09/draft-baker-http-resource-state-model-01.txt (धारा 3.1.4)।

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

सारांश में, अपने प्रश्न का उत्तर है:

  • विधि: पोस्ट
  • अनुरोध: नंबरों की सूची की अभिव्यक्ति
  • उत्तर: (एक संख्या की अभिव्यक्ति की औसत सूची)

हालांकि यह एक एसओएपी-शैली वेब सेवा आमंत्रण की तरह दिख सकता है, यह नहीं है। एसओएपी क्लाउड को अपनी चिपचिपा प्रतिक्रिया को POST विधि के उपयोग के बारे में न दें और उस पर अनावश्यक बाधाएं न रखें।

KISS (इसे सरल, बेवकूफ रखें)।

0

आप केवल एक हैश या आईडी नहीं लौट सकते हैं, आपको यूआरआई या यूआरआई टेम्पलेट और फ़ील्ड मानों को वापस करना होगा। एकमात्र यूआरआई जो आपके एपीआई का हिस्सा हो सकता है प्रवेश बिंदु है, अन्यथा आपका एपीआई आरईएसटी नहीं है।

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