API Pagination 101 - rnakidi/dsa GitHub Wiki

𝐏𝐚𝐠𝐢𝐧𝐚𝐭𝐢𝐨𝐧 𝐢𝐧 𝐀𝐏𝐈 𝐃𝐞𝐬𝐢𝐠𝐧 💡

Pagination is crucial in API design to handle large datasets efficiently and improve performance. Here are six popular pagination techniques:

𝐎𝐟𝐟𝐬𝐞𝐭-𝐛𝐚𝐬𝐞𝐝 𝐏𝐚𝐠𝐢𝐧𝐚𝐭𝐢𝐨𝐧: This technique uses an offset and a limit parameter to define the starting point and the number of records to return.

  • Example: GET /orders?offset=0&limit=3
  • Pros: Simple to implement and understand.
  • Cons: It can become inefficient for large offsets, requiring scanning and skipping rows.

𝐂𝐮𝐫𝐬𝐨𝐫-𝐛𝐚𝐬𝐞𝐝 𝐏𝐚𝐠𝐢𝐧𝐚𝐭𝐢𝐨𝐧: This technique uses a cursor (a unique identifier) to mark the position in the dataset. Typically, the cursor is an encoded string that points to a specific record. Example: GET /orders?cursor=xxx

  • Pros: More efficient for large datasets, as it doesn't require scanning skipped records.
  • Cons: Slightly more complex to implement and understand.

𝐏𝐚𝐠𝐞-𝐛𝐚𝐬𝐞𝐝 𝐏𝐚𝐠𝐢𝐧𝐚𝐭𝐢𝐨𝐧: This technique specifies the page number and the size of each page. Example: GET /items?page=2&size=3

  • Pros: Easy to implement and use.
  • Cons: Similar performance issues as offset-based pagination for large page numbers.

𝐊𝐞𝐲𝐬𝐞𝐭-𝐛𝐚𝐬𝐞𝐝 𝐏𝐚𝐠𝐢𝐧𝐚𝐭𝐢𝐨𝐧: This technique uses a key to filter the dataset, often the primary key or another indexed column. Example: GET /items?after_id=102&limit=3

  • Pros: Efficient for large datasets and avoids performance issues with large offsets.
  • Cons: Requires a unique and indexed key, and can be complex to implement.

𝐓𝐢𝐦𝐞-𝐛𝐚𝐬𝐞𝐝 𝐏𝐚𝐠𝐢𝐧𝐚𝐭𝐢𝐨𝐧: This technique uses a timestamp or date to paginate through records. Example: GET /items?start_time=xxx&end_time=yyy

  • Pros: Useful for datasets ordered by time, ensures no records are missed if new ones are added.
  • Cons: Requires a reliable and consistent timestamp.

𝐇𝐲𝐛𝐫𝐢𝐝 𝐏𝐚𝐠𝐢𝐧𝐚𝐭𝐢𝐨𝐧: This technique combines multiple pagination techniques to leverage their strengths. Example: Combining cursor and time-based pagination for efficient scrolling through time-ordered records. Example: GET /items?cursor=abc&start_time=xxx&end_time=yyy

  • Pros: Can offer the best performance and flexibility for complex datasets.
  • Cons: More complex to implement and requires careful design.

image

Source/Credit: https://www.linkedin.com/posts/adnan-maqbool-khan-0b4531a1_%F0%9D%90%8F%F0%9D%90%9A%F0%9D%90%A0%F0%9D%90%A2%F0%9D%90%A7%F0%9D%90%9A%F0%9D%90%AD%F0%9D%90%A2%F0%9D%90%A8%F0%9D%90%A7-%F0%9D%90%A2%F0%9D%90%A7-%F0%9D%90%80%F0%9D%90%8F%F0%9D%90%88-%F0%9D%90%83%F0%9D%90%9E%F0%9D%90%AC%F0%9D%90%A2-activity-7275755365084921856-INHu?utm_source=share&utm_medium=member_desktop