2012-02-10 12 views
9

प्राप्त करने की idempotency आरईएसटी अवधारणाओं जैसे कि सुरक्षित संचालन, idempotency, आदि के साथ चिपकने के लिए, एक जटिल खोज ऑपरेशन को कई पैरामीटर से कैसे लागू कर सकते हैं?आरईएसटी खोज इंटरफ़ेस और

मैंने Google के कार्यान्वयन को देखा है, और यह रचनात्मक है। इसके अलावा एक विकल्प क्या है?

बेवकूफ आवश्यकता मुझे क्या चल रही है, क्योंकि ऑपरेशन निश्चित रूप से एक ही मानदंड के लिए एक ही परिणाम नहीं लौटाएगा, "स्मिथ" नामक ग्राहकों के लिए खोज हर बार एक ही सेट वापस नहीं करेगा, क्योंकि अधिक "स्मिथ "ग्राहक हर समय जोड़े जाते हैं। मेरा वृत्ति इस के लिए जीईटी का उपयोग करना है, लेकिन एक सच्ची खोज सुविधा के लिए, परिणाम बेवकूफ प्रतीत नहीं होता है, और इसके द्रव परिणाम सेट के कारण गैर-कैशबल के रूप में चिह्नित करने की आवश्यकता होगी।

+0

शीर्षक पर अच्छा संपादन! –

उत्तर

23

इसे एक और तरीके से रखने के लिए, idempotency के पीछे मूल बातें यह है कि जीईटी ऑपरेशन ऑपरेशन के परिणामों को प्रभावित नहीं करता है। यही है, जीईटी सुरक्षित रूप से किसी भी दुष्प्रभाव के साथ दोहराया जा सकता है।

हालांकि, एक बेवकूफ अनुरोध के पास संसाधन के प्रतिनिधित्व से कोई लेना देना नहीं है।

दो काल्पनिक उदाहरण:

GET /current-time 

GET /current-weather/90210 

स्पष्ट होना चाहिए, इन संसाधनों समय के साथ बदल के रूप में, कुछ संसाधनों अधिक तेजी से दूसरों की तुलना में बदल जाते हैं। लेकिन वास्तविक संसाधन को प्रभावित करने में जीईटी ऑपरेशन खुद जर्मनी नहीं है।

कंट्रास्ट के लिए:

GET /next-counter 

यह स्पष्ट रूप से मुझे आशा है कि है, न कि idempotent अनुरोध, है। अनुरोध स्वयं संसाधन बदल रहा है।

इसके अलावा, ऐसा कुछ भी नहीं है जो कहता है कि एक बेवकूफ ऑपरेशन का कोई दुष्प्रभाव नहीं है। जाहिर है, जीईटी समेत कई सिस्टम लॉग एक्सेस और अनुरोध करते हैं। इसलिए, जब आप जीईटी/संसाधन करते हैं, तो उस जीईटी के परिणामस्वरूप लॉग बदल जाएंगे। उस तरह की तरफ से प्रभावित होने से यह बेकार नहीं होता है। मौलिक आधार संसाधन पर ही प्रभाव पड़ता है।

लेकिन क्या बारे में, कहते हैं:

GET /logs 

लॉग प्रत्येक अनुरोध पंजीकृत करते हैं, और प्राप्त अपनी वर्तमान स्थिति में लॉग लौटा रहा है, इसका मतलब यह है कि कि इस मामले में प्राप्त idempotent नहीं है? हाँ! क्या यह वास्तव में मायने रखता है? नहीं। इस एक किनारे के मामले के लिए नहीं। बस खेल की प्रकृति।

के बारे में क्या:

GET /random-number 

आप एक छद्म यादृच्छिक संख्या जनरेटर का उपयोग कर रहे हैं, तो खुद पर उन फ़ीड के सबसे। अगली संख्या प्राप्त करने के लिए एक बीज से शुरू करना और अपने परिणामों को वापस अपने आप में खिलााना। तो, यहां एक जीईटी का उपयोग कर बेवकूफ नहीं हो सकता है। लेकिन क्या यह है? आप कैसे जानते हैं कि यादृच्छिक संख्या कैसे उत्पन्न होती है। यह एक सफेद शोर स्रोत हो सकता है। और आप परवाह क्यों करते हैं? यदि संसाधन बस एक यादृच्छिक संख्या है, तो आप वास्तव में नहीं जानते कि ऑपरेशन इसे बदल रहा है या नहीं।

लेकिन सिर्फ इसलिए कि दिशानिर्देशों में अपवाद हो सकते हैं, उन दिशानिर्देशों के पीछे अवधारणाओं को अमान्य रूप से अमान्य नहीं करता है।

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

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

2

यह उसी डेटासेट के लिए बेवकूफ होगा। आप इसे टाइमस्टैम्प फ़िल्टर के साथ प्राप्त कर सकते हैं।

+0

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

+0

क्यों समय समाप्त कैश नहीं है? – Chriseyre2000

+0

मुझे वह विचार पसंद है। तो, क्या बात है? मैं अपने प्रश्न परिणामों को पूर्व निर्धारित समय के लिए संग्रहीत करता हूं ताकि उस प्रतिनिधित्व को दोबारा पूरा किया जा सके? –

9

ठीक से कार्यान्वित होने पर सुरक्षित और बेवकूफ है। इसका मतलब है कि:

  1. यह सर्वर साइड
  2. जब एक ही यूआरआई के निर्देश पर पर कोई क्लाइंट दिखाई दुष्प्रभाव का कारण होगा, यह हर बार निष्पादित करने के लिए एक ही सर्वर साइड समारोह का कारण बनता है कैसे की परवाह किए बिना कई बार यह जारी किया जाता है, या जब

क्या है नहीं ऊपर कहा उसी URI हमेशा एक ही डेटा रिटर्न के लिए मिलता है।

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

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

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