ฉันได้ทำการวิจัยอย่างกว้างขวางเกี่ยวกับเรื่องนี้และคำถามอื่น ๆ ที่เกี่ยวข้องกับการเพจเพจเมื่อเร็ว ๆ นี้และคิดว่ามันสร้างสรรค์เพื่อเพิ่มสิ่งที่ฉันค้นพบที่นี่ ฉันกำลังขยายคำถามเล็กน้อยเพื่อรวมความคิดเกี่ยวกับการเพจเช่นเดียวกับการนับที่เกี่ยวข้องอย่างใกล้ชิด
ส่วนหัว
ข้อมูลเมตาเพจจิ้งรวมอยู่ในการตอบสนองในรูปแบบของส่วนหัวการตอบสนอง ประโยชน์ที่ยิ่งใหญ่ของวิธีการนี้คือส่วนของข้อมูลการตอบสนองนั้นเป็นเพียงผู้ร้องขอข้อมูลที่แท้จริงกำลังร้องขอ ทำให้การประมวลผลการตอบสนองง่ายขึ้นสำหรับลูกค้าที่ไม่สนใจข้อมูลการเพจ
มีส่วนหัว (มาตรฐานและกำหนดเอง) ที่ใช้ใน wild เพื่อส่งคืนข้อมูลที่เกี่ยวข้องกับการเพจรวมถึงจำนวนทั้งหมด
X-รวม-Count
X-Total-Count: 234
สิ่งนี้ใช้ในAPI บางตัวที่ พบใน wild นอกจากนี้ยังมีแพ็คเกจ NPMสำหรับเพิ่มการสนับสนุนสำหรับส่วนหัวนี้เช่น Loopback บางบทความแนะนำให้ตั้งค่าส่วนหัวนี้ด้วย
มันมักจะใช้ร่วมกับ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
ฯลฯ ปัญหานี้ก็คือว่ามันขาดข้อมูลของระเบียนทั้งหมดหลายวิธีที่มีซึ่งเป็น เหตุใด API จำนวนมากจึงรวมสิ่งนี้กับX-Total-Count
ส่วนหัว
อีกวิธีหนึ่งคือ API บางตัวและมาตรฐานJsonApiใช้Link
รูปแบบ แต่เพิ่มข้อมูลในซองจดหมายตอบกลับแทนที่จะเป็นส่วนหัว ทำให้การเข้าถึงข้อมูลเมตา (และสร้างสถานที่เพื่อเพิ่มข้อมูลการนับทั้งหมด) ทำได้โดยเสียค่าใช้จ่ายในการเพิ่มความซับซ้อนในการเข้าถึงข้อมูลจริงเอง (โดยการเพิ่มซองจดหมาย)
เนื้อหาช่วง
Content-Range: items 0-49/234
โปรโมตโดยบทความบล็อกชื่อส่วนหัว Range ฉันเลือกคุณ (สำหรับการแบ่งหน้า)! . ผู้เขียนทำให้กรณีที่แข็งแกร่งสำหรับการใช้Range
และContent-Range
ส่วนหัวสำหรับการแบ่งหน้า เมื่อเราอ่านอย่างละเอียดRFCบนส่วนหัวเหล่านี้เราจะพบว่าการขยายความหมายของพวกเขาเกินกว่าช่วงของไบต์ที่คาดว่าจะจริงโดย RFC และจะได้รับอนุญาตอย่างชัดเจน เมื่อใช้ในบริบทแทนที่จะเป็นส่วนหัวช่วงให้เราทั้งสองวิธีขอรายการบางช่วงและระบุช่วงของผลรวมที่รายการตอบกลับเกี่ยวข้อง ส่วนหัวนี้ยังเป็นวิธีที่ยอดเยี่ยมในการแสดงจำนวนรวม และเป็นมาตรฐานที่แท้จริงซึ่งส่วนใหญ่จะแมปแบบหนึ่งต่อหนึ่งกับการเพจ นอกจากนี้ยังใช้ในป่า items
bytes
ซองจดหมาย
API จำนวนมากรวมถึงหนึ่งในเว็บไซต์คำถามยอดนิยมของเราใช้ซองจดหมายเสื้อคลุมรอบข้อมูลที่ใช้เพื่อเพิ่มข้อมูลเมตาเกี่ยวกับข้อมูล นอกจากนี้มาตรฐานODataและJsonApiทั้งสองใช้ซองจดหมายตอบกลับ
ข้อเสียที่สำคัญของเรื่องนี้ (imho) คือการประมวลผลข้อมูลการตอบสนองมีความซับซ้อนมากขึ้นเนื่องจากข้อมูลจริงจะต้องพบที่ไหนสักแห่งในซองจดหมาย นอกจากนี้ยังมีรูปแบบที่หลากหลายสำหรับซองจดหมายนั้นและคุณต้องใช้รูปแบบที่ถูกต้อง มีการบอกว่าซองจดหมายตอบกลับจาก OData และ JsonApi นั้นแตกต่างกันอย่างมากโดย OData ผสมกันในข้อมูลเมตาที่หลายจุดในการตอบกลับ
จุดปลายแยก
ฉันคิดว่าสิ่งนี้ได้รับการคุ้มครองเพียงพอในคำตอบอื่น ๆ ฉันไม่ได้ตรวจสอบเรื่องนี้มากนักเพราะฉันเห็นด้วยกับความคิดเห็นที่ว่าสิ่งนี้ทำให้เกิดความสับสนเนื่องจากคุณมีจุดปลายหลายประเภท ฉันคิดว่ามันเป็นสิ่งที่ดีที่สุดหากจุดปลายทุกจุดแสดงถึงทรัพยากร (ชุด)
ความคิดเพิ่มเติม
เราไม่เพียง แต่ต้องสื่อสารข้อมูลเมตาเพจจิ้งที่เกี่ยวข้องกับการตอบสนอง แต่ยังอนุญาตให้ลูกค้าขอหน้า / ช่วงที่เฉพาะเจาะจง เป็นที่น่าสนใจที่จะพิจารณามุมมองนี้เพื่อหาทางออกที่สอดคล้องกัน ที่นี่เราสามารถใช้ส่วนหัว ( Range
ส่วนหัวที่ดูเหมือนว่าเหมาะสมมาก) หรือกลไกอื่น ๆ เช่นพารามิเตอร์แบบสอบถาม บางคนสนับสนุนการรักษาหน้าของผลเป็นทรัพยากรที่แยกต่างหากซึ่งอาจทำให้ความรู้สึกในกรณีการใช้งานบางอย่าง (เช่น/books/231/pages/52
. ฉันจบลงด้วยการเลือกช่วงป่าของพารามิเตอร์คำขอที่ใช้บ่อยเช่นpagesize
, page[size]
และlimit
ฯลฯ ในนอกเหนือจากการสนับสนุนRange
ส่วนหัว (และเป็นพารามิเตอร์คำขอ เช่นกัน)