Collection फर्काउने कुनै पनि endpoint ले परिणामलाई सीमित र आकार दिनुपर्छ। तीन सरोकार — pagination, filtering, sorting — सबै query string मा बस्छन्।
Pagination: offset बनाम cursor
Offset (page-आधारित) — ?page=3&limit=20 वा ?offset=40&limit=20।
Collection फर्काउने कुनै पनि endpoint ले परिणामलाई सीमित र आकार दिनुपर्छ। तीन सरोकार — pagination, filtering, sorting — सबै query string मा बस्छन्।
Offset (page-आधारित) — ?page=3&limit=20 वा ?offset=40&limit=20।
GET /orders?offset=40&limit=20 HTTP/1.1
सरल र कुनै पनि page मा जान दिन्छ, तर ठूलो स्तरमा दुई समस्या छन्: OFFSET 100000 ले database लाई 100k row scan गरेर फाल्न बाध्य पार्छ (सुस्त), र यदि request हरूबीच row insert/delete भए, item हरू सर्छन् र तपाईं duplicate वा skip देख्नुहुन्छ।
Cursor (keyset) — client ले देखेको अन्तिम item तर्फ एउटा opaque pointer पठाउँछ।
GET /orders?limit=20&cursor=eyJpZCI6MTAyMH0 HTTP/1.1
HTTP/1.1 200 OK
{
"data": [ /* 20 orders */ ],
"page": { "next_cursor": "eyJpZCI6MTA0MH0", "has_more": true }
}
Server ले cursor लाई WHERE id > 1020 ORDER BY id LIMIT 20 मा अनुवाद गर्छ — एउटा indexed lookup जुन कुनै पनि गहिराइमा छिटो रहन्छ र insert विरुद्ध स्थिर हुन्छ। Trade-off: "page 500" मा random access छैन।
Offset → small datasets, admin UIs, "jump to page N"
Cursor → large/infinite feeds, real-time data, mobile scroll
GET /orders?status=shipped&min_total=100&sort=-created_at,id HTTP/1.1
status=shipped)। अनुमति दिइएका field whitelist गर्नुहोस्।sort param सँग Sort गर्नुहोस्; - उपसर्गको अर्थ अवरोही (-created_at)। स्थिर क्रमका लागि multi-key समर्थन गर्नुहोस्।limit सीमित गर्नुहोस् (जस्तै अधिकतम 100) ताकि client ले दस लाख row अनुरोध गर्न नसकोस्।यो सबैभन्दा व्यावहारिक API-design प्रश्नहरूमध्ये एक हो किनभने लगभग हरेक list endpoint यसमा पर्छ, र छनोटका वास्तविक performance परिणाम हुन्छन्। Interviewer प्रायः offset-बनाम-cursor trade-off दोहन गर्छन्: जहाँतहीँ offset pagination प्रयोग गर्ने उम्मेदवारले OFFSET 1000000 ले table scan गर्ने पीडा, वा infinite feed scroll गर्दा नयाँ post insert भएकाले प्रयोगकर्ताले उही post दुई पटक देख्ने "shifting results" bug भोगेको छैन। Cursor pagination ले query लाई indexed keyset lookup मा परिणत गरेर दुवै समाधान गर्छ, यही कारण हरेक ठूलो-स्तरको API (Twitter, Stripe, Slack) ले feed का लागि यो प्रयोग गर्छ। बलिया जवाफहरूले सञ्चालन रेलिङ पनि उल्लेख गर्छन् — filter/sort field whitelist गर्ने (unindexed query र injection बाट जोगिन) र limit सीमित गर्ने (database जोगाउन) — जसले यी endpoint production मा चलाएको व्यक्तिलाई ती बारे केवल पढेको व्यक्तिबाट छुट्याउँछ।
विस्तृत उत्तरसहित IT अन्तर्वार्ता प्रश्नहरूको पुस्तकालय — जुनियरदेखि सिनियरसम्म।
दान गर्नुहोस्