Есть 2 основных метода выдачи страниц в api:
- pageNo (номер страницы, бывает как с 1, так и с 0) и pageSize (размер страницы)
- offset (смещение) и limit (кол-во элементов)
PageNo/pageSize легко перевести в offset/limit:
offset = pageNo * pageSize
limit = pageSize
Вычислить же pageNo исходя из offset/limit нетривиальная задача. Есть варианты, когда придется запрашивать больше элементов и потом часть отбрасывать. Например, как-то так https://stackoverflow.com/a/67424046 :
public static PageSizeOffsetLimit toPageSize(int offset, int limit) {
if (offset < limit) {
return new PageSizeOffsetLimit(0, offset + limit, offset, limit);
}
if (offset == limit) {
return new PageSizeOffsetLimit(1, limit, 0, limit);
}
for (int size = limit; size < 2 * limit; size++) {
int newOffset = offset % size;
if ((size - limit) >= newOffset) {
return new PageSizeOffsetLimit(offset / size, size, newOffset, limit);
}
}
throw new RuntimeException(String.format(
"Cannot determinate page and size from offset and limit (offset: %s, limit: %s)",
offset,
limit));
}
(как видно, компилятор не особо понимает точно мы найдем значение или нет – один из примеров непокрываемого в тестах кода)
Так что более универсальная и более понятная (нет начала то с 0, то с 1) пара offset/limit, но если потом придется переходить на pageNo/pageSize, то это может потребовать дополнительных ухищрений.
В целом, в API стараюсь использовать offset/limit.