मैं इस और अन्य 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पृष्ठांकन के लिए हेडर। जब हम ध्यान से पढ़ें आरएफसी इन हेडर पर, हम पाते हैं कि बाइट्स की सीमाओं से उनके अर्थ का विस्तार वास्तव में आरएफसी द्वारा अनुमानित था और स्पष्ट रूप से अनुमति दी है। जब इसके बजाय के संदर्भ में उपयोग किया जाता है , तो रेंज हेडर वास्तव में दोनों वस्तुओं की एक निश्चित सीमा का अनुरोध करने का एक तरीका देता है और इंगित करता है कि कुल परिणाम किस श्रेणी से संबंधित हैं। यह हेडर कुल गिनती दिखाने का एक शानदार तरीका देता है। और यह एक सच्चा मानक है जो ज्यादातर पेजिंग के लिए वन-टू-वन मैप करता है। इसका उपयोग जंगली में भी किया जाता है । itemsbytes
लिफ़ाफ़ा
हमारी पसंदीदा क्यू एंड ए वेबसाइट से एक सहित कई एपीआई, एक लिफाफे का उपयोग करते हैं , डेटा के चारों ओर एक आवरण जो डेटा के बारे में मेटा जानकारी जोड़ने के लिए उपयोग किया जाता है। इसके अलावा, OData और JsonApi मानकों दोनों एक प्रतिक्रिया लिफाफे का उपयोग करते हैं।
इस (imho) के लिए बड़ा नकारात्मक यह है कि प्रतिक्रिया डेटा को संसाधित करना अधिक जटिल हो जाता है क्योंकि वास्तविक डेटा को लिफाफे में कहीं और ढूंढना पड़ता है। इसके अलावा उस लिफाफे के कई अलग-अलग प्रारूप हैं और आपको सही उपयोग करना है। यह बता रहा है कि ओडटा और जोंसअपी से प्रतिक्रिया लिफाफे बेतहाशा अलग हैं, ओडटा ने मेटाडाटा में कई बिंदुओं पर प्रतिक्रिया में मिश्रण किया है।
अलग समापन बिंदु
मुझे लगता है कि यह अन्य उत्तरों में पर्याप्त रूप से कवर किया गया है। मैंने इसकी बहुत जांच नहीं की क्योंकि मैं टिप्पणियों से सहमत हूं कि यह भ्रामक है क्योंकि अब आपके पास कई प्रकार के समापन बिंदु हैं। मुझे लगता है कि यह सबसे अच्छा है अगर हर समापन बिंदु एक (संसाधन) का संग्रह का प्रतिनिधित्व करता है।
आगे के विचार
हमें न केवल प्रतिक्रिया से संबंधित पेजिंग मेटा जानकारी को संप्रेषित करना है, बल्कि ग्राहक को विशिष्ट पृष्ठों / सीमाओं का अनुरोध करने की भी अनुमति है। एक सुसंगत समाधान के साथ समाप्त होने के लिए इस पहलू को देखना भी दिलचस्प है। यहाँ भी हम हेडर का उपयोग कर सकते हैं ( Rangeहेडर बहुत उपयुक्त लगता है), या अन्य तंत्र जैसे क्वेरी पैरामीटर। कुछ लोगों को अलग संसाधन है, जो कुछ उपयोग के मामलों में अर्थपूर्ण हो सकता है (उदाहरण के रूप में परिणाम के पन्नों के इलाज के वकील /books/231/pages/52। मैं इस तरह के रूप में अक्सर इस्तेमाल किया अनुरोध पैरामीटर के एक जंगली सीमा के चयन समाप्त हो गया pagesize, page[size]और limitआदि समर्थन करने के अलावा में Rangeहैडर (और अनुरोध पैरामीटर के रूप में भी)।