Sobes.tech
Senior
37

Come implementare la paginazione in un'API? Problemi con OFFSET in PostgreSQL e alternative (paginazione basata su cursore)?

Le aziende dove è stato chiesto
платформа офд

Risposta dell'AI

sobes.tech AI

Пагинация в API нужна для ограничения объёма данных, возвращаемых за один запрос. Часто используется OFFSET в SQL, например:

SELECT * FROM items ORDER BY id LIMIT 10 OFFSET 100;

Но OFFSET имеет проблемы:

  • При больших значениях OFFSET запросы становятся медленнее, так как база должна пропустить много строк.
  • При изменении данных между запросами возможны пропуски или дублирование записей.

Альтернатива — cursor-based pagination (пагинация на основе курсора):

Вместо смещения передаётся значение последнего полученного элемента (например, id или timestamp). Запрос выглядит так:

SELECT * FROM items WHERE id > :last_id ORDER BY id LIMIT 10;

Преимущества:

  • Быстрее при больших объёмах данных.
  • Более стабильна при изменении данных (нет пропусков и дубликатов).

Недостаток — сложнее реализовать и поддерживать, особенно если сортировка сложная.

В Java API можно реализовать передачу курсора как параметра запроса, например ?after=12345&limit=10.