मैं इस और अन्य REST पेजिंग से संबंधित कुछ विस्तृत शोध हाल ही में कर रहा हूं और सोचा कि अपने कुछ निष्कर्षों को यहां जोड़ूं। मैं पेजिंग पर विचारों को शामिल करने के लिए प्रश्न को थोड़ा विस्तार कर रहा हूं और साथ ही वे अंतरंग रूप से संबंधित हैं।
हेडर
पेजिंग मेटाडेटा प्रतिक्रिया हेडर के रूप में प्रतिक्रिया में शामिल है। इस दृष्टिकोण का बड़ा लाभ यह है कि प्रतिक्रिया पेलोड ही वास्तविक डेटा अनुरोधकर्ता के लिए पूछ रहा है। पेजिंग जानकारी में रुचि नहीं रखने वाले ग्राहकों के लिए प्रतिक्रिया को आसान बनाना।
कुल गिनती सहित, संबंधित जानकारी को वापस करने के लिए जंगली में उपयोग किए जाने वाले मानक (मानक और कस्टम) हेडर का एक गुच्छा है।
एक्स-कुल-गणना
X-Total-Count: 234
यह कुछ एपीआई में उपयोग किया जाता है जो मुझे जंगल में मिला। इस शीर्षलेख के लिए उदाहरण के लिए लूपबैक में समर्थन जोड़ने के लिए एनपीएम पैकेज भी हैं । कुछ लेख इस हेडर को भी सेट करने की सलाह देते हैं।
यह अक्सर Link
हेडर के साथ संयोजन में उपयोग किया जाता है , जो पेजिंग के लिए एक बहुत अच्छा समाधान है, लेकिन कुल गणना की जानकारी का अभाव है।
संपर्क
Link: </TheBook/chapter2>;
rel="previous"; title*=UTF-8'de'letztes%20Kapitel,
</TheBook/chapter4>;
rel="next"; title*=UTF-8'de'n%c3%a4chstes%20Kapitel
मुझे लगता है, इस विषय पर बहुत कुछ पढ़ने से, कि आम सहमति का उपयोग करने वाले ग्राहकों को पेजिंग लिंक प्रदान करने के लिए Link
हेडर का उपयोग करना है rel=next
, rel=previous
आदि इसके साथ समस्या यह है कि इसमें कुल कितने रिकॉर्ड हैं, इसकी जानकारी का अभाव है, जो है क्यों कई एपीआई X-Total-Count
हैडर के साथ इसे जोड़ते हैं ।
वैकल्पिक रूप से, कुछ API और उदाहरण के लिए JsonApi मानक, Link
प्रारूप का उपयोग करते हैं , लेकिन हेडर के बजाय प्रतिक्रिया लिफाफे में जानकारी जोड़ते हैं। यह मेटाडेटा तक पहुंच को सरल करता है (और कुल डेटा को जोड़ने के लिए एक जगह बनाता है) वास्तविक डेटा तक पहुँचने की बढ़ती जटिलता की कीमत पर (एक लिफाफा जोड़कर)।
सामग्री रेंज
Content-Range: items 0-49/234
रेंज हेडर नाम के एक ब्लॉग लेख द्वारा प्रचारित , मैं आपको (पेजिनेशन के लिए) चुनता हूं! । लेखक प्रयोग करने के लिए एक मजबूत मामला बनाता है Range
और Content-Range
पृष्ठांकन के लिए हेडर। जब हम ध्यान से पढ़ें आरएफसी इन हेडर पर, हम पाते हैं कि बाइट्स की सीमाओं से उनके अर्थ का विस्तार वास्तव में आरएफसी द्वारा अनुमानित था और स्पष्ट रूप से अनुमति दी है। जब इसके बजाय के संदर्भ में उपयोग किया जाता है , तो रेंज हेडर वास्तव में दोनों वस्तुओं की एक निश्चित सीमा का अनुरोध करने का एक तरीका देता है और इंगित करता है कि कुल परिणाम किस श्रेणी से संबंधित हैं। यह हेडर कुल गिनती दिखाने का एक शानदार तरीका देता है। और यह एक सच्चा मानक है जो ज्यादातर पेजिंग के लिए वन-टू-वन मैप करता है। इसका उपयोग जंगली में भी किया जाता है । items
bytes
लिफ़ाफ़ा
हमारी पसंदीदा क्यू एंड ए वेबसाइट से एक सहित कई एपीआई, एक लिफाफे का उपयोग करते हैं , डेटा के चारों ओर एक आवरण जो डेटा के बारे में मेटा जानकारी जोड़ने के लिए उपयोग किया जाता है। इसके अलावा, OData और JsonApi मानकों दोनों एक प्रतिक्रिया लिफाफे का उपयोग करते हैं।
इस (imho) के लिए बड़ा नकारात्मक यह है कि प्रतिक्रिया डेटा को संसाधित करना अधिक जटिल हो जाता है क्योंकि वास्तविक डेटा को लिफाफे में कहीं और ढूंढना पड़ता है। इसके अलावा उस लिफाफे के कई अलग-अलग प्रारूप हैं और आपको सही उपयोग करना है। यह बता रहा है कि ओडटा और जोंसअपी से प्रतिक्रिया लिफाफे बेतहाशा अलग हैं, ओडटा ने मेटाडाटा में कई बिंदुओं पर प्रतिक्रिया में मिश्रण किया है।
अलग समापन बिंदु
मुझे लगता है कि यह अन्य उत्तरों में पर्याप्त रूप से कवर किया गया है। मैंने इसकी बहुत जांच नहीं की क्योंकि मैं टिप्पणियों से सहमत हूं कि यह भ्रामक है क्योंकि अब आपके पास कई प्रकार के समापन बिंदु हैं। मुझे लगता है कि यह सबसे अच्छा है अगर हर समापन बिंदु एक (संसाधन) का संग्रह का प्रतिनिधित्व करता है।
आगे के विचार
हमें न केवल प्रतिक्रिया से संबंधित पेजिंग मेटा जानकारी को संप्रेषित करना है, बल्कि ग्राहक को विशिष्ट पृष्ठों / सीमाओं का अनुरोध करने की भी अनुमति है। एक सुसंगत समाधान के साथ समाप्त होने के लिए इस पहलू को देखना भी दिलचस्प है। यहाँ भी हम हेडर का उपयोग कर सकते हैं ( Range
हेडर बहुत उपयुक्त लगता है), या अन्य तंत्र जैसे क्वेरी पैरामीटर। कुछ लोगों को अलग संसाधन है, जो कुछ उपयोग के मामलों में अर्थपूर्ण हो सकता है (उदाहरण के रूप में परिणाम के पन्नों के इलाज के वकील /books/231/pages/52
। मैं इस तरह के रूप में अक्सर इस्तेमाल किया अनुरोध पैरामीटर के एक जंगली सीमा के चयन समाप्त हो गया pagesize
, page[size]
और limit
आदि समर्थन करने के अलावा में Range
हैडर (और अनुरोध पैरामीटर के रूप में भी)।