Fork me on GitHub
#clojure-russia
<
2017-06-21
>
andrewtropin09:06:05

Вопрос про пагинацию в rest api: сейчас мы делаем её через Link header, https://tools.ietf.org/html/rfc5988 все дела. Но генерить и парсить Link header неудобно. Кажется есть смысл отдавать данные о пагинации прямо в response body {:entities [{..}...] :total 30 :limit 10 :offset 20}. Какие проблемы этого подхода?

fmnoise12:06:44

мы в рельсах почти так и делаем

fmnoise12:06:52

проблем пока не заметил

fmnoise12:06:53

линк хидер гибче просто

kronos_vano12:06:47

@andrewtropin как сортировка происходит?

andrewtropin12:06:51

В разных местах по-разному. Где-то по pk, где-то по created-at, где-то из запроса берутся параметры сортировки. Зависит от сущности.

kronos_vano12:06:34

ну я к тому, что если поля по которым сортируется меняются в процессе пагинации то юзеру могут или не придти некоторые данные или придти дважды

fmnoise12:06:46

линк хидер от этого не спасет

kronos_vano12:06:10

fmnoise: а где я вообще утверждал что он спасет?)

fmnoise12:06:05

не, ты не утверждал, просто человек спрашивал, если от линк хидера уйти к передаче параметров пагинации в боди, то будут ли проблемы)

fmnoise12:06:45

ну в данном случае ты пожалуй прав, линк хидер может зарешать проблему фиксации коллекции

fmnoise12:06:27

а если поля меняются в процессе пагинации, то значит вообще что-то не так

fmnoise12:06:15

например до 100го по полю state а после 100го по полю status

kronos_vano12:06:08

*значения полей

andrewtropin12:06:42

kronos_vano: а можно пример?

kronos_vano12:06:38

Самый простой - сортировка по updated_at

andrewtropin12:06:09

ну да, такое может быть. Но кажется это не большая проблема и с Link header поведение будет такое же.

fmnoise12:06:26

тоже не спасет

fmnoise12:06:42

если данные поменялись в процессе выгребания всех страниц

fmnoise12:06:50

то от этого вообще ничего не спасет

fmnoise12:06:14

т.к. линк хидер просто указывает куда смотреть дальше

fmnoise12:06:41

то что в описанном случае будет конструировать клиент исходя из полученных данных для пагинации

fmnoise12:06:49

для того чтобы от этого уйти, можно фиксировать коллекцию на момент запроса, хранить где-то и выдавать постранично

fmnoise12:06:04

тут да, линк хидер может помочь

fmnoise12:06:16

но в дикой природе я не встречал пока таких кейсов

fmnoise12:06:18

обычно клиент уже разгребает сам эти случаи

misha12:06:48

пагинацию в боди дебажить проще, но для индексации поисковиками хуже

misha13:06:51

хедерами проще навязывать клиенту (не нужно умень собирать урлы на клиенте) куда ходить дальше, по закешированым страницам например.

andrewtropin14:06:00

misha: Спасибо за мысли

dottedmag17:06:07

@fmnoise Вот если бы была такая база данных, которую можно спросить про историческое значение... philosoraptor

akond18:06:44

ребзя, шо вы думаете про пони?

akond18:06:55

кроме того что он ещё не стабильный

rmuslimov19:06:26

@akond шо за пони?

artemyarulin19:06:25

my little pony вестимо

misha19:06:56

тут с одним бы языком для начала разобраться...

fmnoise19:06:25

@dottedmag ну таймштамп запроса для получения среза по истории тоже придется где-то хранить, вот тут линк хедер и зайдет

niquola21:06:11

Ребята кто следующий готов подхватить наш групповой twitter?!!!

niquola21:06:17

на недельку

niquola21:06:34

Созрели ли мы на hangout - темы? ES?

akond21:06:00

в два часа ночи?