2009-08-20 12 views
5

मान लें कि मेरे पास एक रीस्टफुल, हाइपरटेक्स्ट-संचालित सेवा है जो आइसक्रीम स्टोर बनाती है। मेरी दुकान को बेहतर तरीके से प्रबंधित करने में सहायता के लिए, मैं बेची गई प्रत्येक प्रकार की आइसक्रीम की दैनिक रिपोर्ट सूची मात्रा और डॉलर मूल्य प्रदर्शित करने में सक्षम होना चाहता हूं।क्षणिक आरईएसटी प्रतिनिधियों

ऐसा लगता है कि इस रिपोर्टिंग क्षमता को DailyReport नामक संसाधन के रूप में उजागर किया जा सकता है। एक दैनिक रिपोर्ट शीघ्रता से उत्पन्न किया जा सकता है, और वास्तव में सर्वर पर रिपोर्ट संग्रहीत करने के लिए कोई फायदा नहीं होता है। मैं केवल कुछ दिनों के लिए डेली रिपोर्ट चाहता हूं, अन्य दिन मुझे डेली रिपोर्ट प्राप्त करने की परवाह नहीं है। इसके अलावा, सर्वर पर DailyReports को संग्रहीत करने से ग्राहक कार्यान्वयन जटिल हो जाएंगे, जिन्हें उन रिपोर्टों को हटाने के लिए याद रखना होगा जिन्हें अब उनकी आवश्यकता नहीं है।

एक दैनिक रिपोर्ट क्षणिक है; इसका प्रतिनिधित्व केवल एक बार प्राप्त किया जा सकता है। इसे लागू करने का एक तरीका एक लिंक "/ दैनिक-रिपोर्ट" प्रदान करना होगा, एक पोस्ट जिसमें एक दैनिक रिपोर्ट प्रस्तुत करने वाली प्रतिक्रिया वापस आएगी जिसमें उस दिन की बिक्री के लिए जानकारी सूचीबद्ध होगी।

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

क्या समस्या के बारे में सोचने का यह सही तरीका है, या इसके बजाय किसी अन्य दृष्टिकोण का उपयोग किया जाना चाहिए? यदि सही है, तो DailyReport संसाधन को लागू करते समय कौन से विशेष विचार महत्वपूर्ण हो सकते हैं? (उदाहरण के लिए, POST अनुरोध के बाद लौटने पर शायद स्थान शीर्षलेख सेट करना उचित नहीं होगा)।

उत्तर

4

यदि आप पिछले दिनों के लिए दैनिक रिपोर्ट बनाना चाहते हैं, तो आप इसे /daily_reports/2009/08/20 पर जीईटी के रूप में कार्यान्वित कर सकते हैं। मैं जॉन मिलिकिन से सहमत हूं कि एक पोस्ट यहां अनावश्यक है - इस तरह की किसी चीज़ को उपयोगकर्ता-रचनात्मक संसाधन होने की आवश्यकता नहीं है।

प्रत्येक दिन के लिए अपनी यूआरआई के रूप में उपलब्ध रिपोर्ट बनाने का लाभ कैशबिलिटी है।

संपादित करें: एक अच्छा समाधान दो जवाब मर्ज करने के लिए, daily_report/ वर्तमान दिन के डेटा का एक नो-कैश प्रतिनिधित्व और daily_reports/yyyy/mm/dd एक पूरा दिन के डेटा का एक संचित करने योग्य प्रतिनिधित्व कर रही हो सकता है।

+0

ने हाल ही में ऐसा कुछ किया है, सिवाय इसके कि मैंने (अब तक) स्थायी संस्करण पर 'daily_report' एक स्थायी स्थायी रीडायरेक्ट किया है। – xenoterracide

2

इस के लिए POST का उपयोग करने की आवश्यकता नहीं है, क्योंकि रिपोर्ट का अनुरोध सर्वर की स्थिति को नहीं बदलेगा। अपने संपादित का जवाब देते

GET /daily-report/ 

200 OK 
Pragma: no-cache 
<daily-report for="2009-04-20" generated-at="2009-4-20T12:13:14Z"> 
    <!-- contents of the report here --> 
</daily-report> 

: मैं इस तरह एक संसाधन का प्रयोग करेंगे अगर आप एक यूआरएल के लिए रिपोर्ट की एक विवरण पोस्ट कर रहे हैं, और पुन: प्राप्त करने के लिए एक अस्थायी डेटा फलस्वरूप निर्धारित की, उस पर आराम नहीं है सब। यह एसपीएपी के समान नस में आरपीसी है। आरपीसी एक स्वाभाविक रूप से बुरी चीज नहीं है, लेकिन कृपया, कृपया इसे सही कॉल न करें।

+0

अच्छा बिंदु। क्या होगा यदि डेली रिपोर्ट में कई पैरामीटर लागू किए जा सकें - उदाहरण के लिए आइसक्रीम प्रकारों को वर्णानुक्रम या डॉलर के आंकड़े से क्रमबद्ध करें - और यदि मैं ऐसा करने के लिए क्वेरी पैरामीटर का उपयोग नहीं करना चाहता था तो क्या होगा? या क्या होगा यदि मैं तिथि सीमा को पिछले 24 घंटों के अलावा किसी अन्य चीज़ पर सेट करना चाहता हूं, यानी, एक सामान्य उद्देश्य रिपोर्ट संसाधन? मान लीजिए कि मैं इन विकल्पों को क्वेरी पैरामीटर के रूप में शामिल नहीं करना चाहता हूं, बल्कि एक पोस्ट पेलोड के रूप में भेजे गए पूर्ण रूप से प्रस्तुत प्रतिनिधित्व के रूप में? मैं इसके बारे में क्या सोच रहा हूं उसके करीब है। –

+0

आप क्वेरी पैरामीटर का उपयोग क्यों नहीं करना चाहते हैं? यही वह है जिसके लिए वे मौजूद हैं। कस्टम रिपोर्ट श्रेणी भी क्वेरी पैरामीटर का उपयोग करके प्रदान की जा सकती है। यदि पैरामीटर इतने जटिल हैं कि उन्हें क्वेरी स्ट्रिंग में प्रदर्शित नहीं किया जा सकता है, तो यह सर्वर पर अपलोड करने और दैनिक रिपोर्ट को उप-संसाधन बनाने के लायक हो सकता है। –

1

मुझे लगता है कि Greg's approach सही है। इस पर विस्तार करने के लिए, मुझे नहीं लगता कि आपको /daily-report संसाधन प्रदान करना चाहिए जो दैनिक रूप से बदलता है, क्योंकि मंगलवार को 11:59 बजे रिपोर्ट चलाने से बुधवार को 00:01 बजे चलने से अलग-अलग परिणाम मिलेंगे, जो ए हो सकता है) भ्रमित ग्राहकों को संसाधन होने की उम्मीद है, और बी) ग्राहकों को दिन बीत जाने के बाद पिछले दिन के डेटा को पुनर्प्राप्त करने की अनुमति नहीं देता है।आपको उपलब्ध प्रत्येक दैनिक रिपोर्ट के लिए एक अद्वितीय संसाधन पहचानकर्ता प्रदान करना चाहिए, इस तरह से ग्राहक किसी भी समय उनकी आवश्यक जानकारी तक पहुंच सकते हैं।

+0

संसाधनों का एक/TodaysWeather प्रकार होना आम बात है। जीईटी के बीच संसाधन बदलते समय ग्राहक को आश्चर्य नहीं होना चाहिए। –

+0

मैं डैरल की टिप्पणी से सहमत हूं, बस उचित समाप्ति शीर्षलेख जोड़ें। यह एक संसाधन प्राप्त करने के लिए पूरी तरह से मान्य है जो इसे पुनर्प्राप्त करने के समय के लिए कुछ वर्तमान का प्रतिनिधित्व करता है। यदि आप एपीआई उपभोक्ता को स्पष्ट करना चाहते हैं तो आप अलग यूआरआई प्रारूपों को प्राप्त करना चाहते हैं: /दैनिक रिपोर्ट /संग्रह/दैनिक रिपोर्ट/200 9/02/12 मुझे यकीन है कि कोई इसमें कूद जाएगा और आरईएसटी का उल्लेख यूआरआई डिज़ाइन की परवाह नहीं करता है, हालांकि वे एक प्रयोग योग्य एपीआई डिजाइन करने के लिए महत्वपूर्ण हैं। –

2

कभी-कभी रिपोर्ट के लिए अनुरोधों का रिकॉर्ड रखना वांछनीय है, उन मामलों में संग्रह संसाधन में पोस्ट करने के लिए अनुचित नहीं है। यह लंबी चल रही रिपोर्टों के लिए भी उपयोगी है जहां आप निष्पादन को असीमित रूप से संभालना चाहते हैं। सर्वर पर उन रिपोर्ट अनुरोधों पर कितना समय लगता है आप पर निर्भर है।

मैं की तरह

POST /DailyReportRequests 

जो कुछ विकल्प सहित अनुरोध, का प्रतिनिधित्व वापसी होगी करना होगा, और रिपोर्ट पूरा हो गया है जब, रिपोर्ट परिणामों का लिंक।

एक और विकल्प जो आपके पास पूर्व-डिब्बाबंद रिपोर्ट का एक सेट है, वह है डेली रीपॉर्ट्स संसाधन बनाना जिसमें पूर्व-कॉन्फ़िगर किए गए रिपोर्ट लिंक की एक सूची है। OpenSearchDescription spec आपको क्वेरी टैग का उपयोग करके ऐसा कुछ करने की अनुमति देता है।

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