Есть 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.