Мой API обеспечивает пагинацию на основе курсора, а не нумерацию смещений по пределу, поэтому сложно подобрать конфигурацию page: {int}
и perPage: {int}
, которую React-Admin предоставляет для GET_LIST
и GET_MANY_REFERENCE
.
Разбиение на основе курсора используется многими API с быстродвижущимися данными, такими как Twitter, Facebook и Slack .
В своей простейшей нумерации на основе курсора это означает, чтоответ списка включает (в теле ответа или в заголовках) непрозрачные курсоры, которые являются «закладками» до конца предыдущей страницы и начала следующей страницы. Он может включать или не включать курсоры для каждого ресурса в ответе и может включать или не включать постоянные курсоры для первой и последней доступных страниц. API на основе курсора с нумерацией страниц также может не быть в состоянии обеспечить значимое «общее количество» ресурсов, соответствующих предоставленному фильтру, как в настоящее время настаивают в реакции-admin GET_LIST
и GET_MANY_REFERENCE
ответы.
Подобные вопросы, похоже, задавались на трекере проблем React-Admin (act-admin # 1510 и response-admin # 1787 ) и на Stack-Переполнение Как разбить списки реагирующих администраторов, когда общее количество неизвестно? ), но все ответы кажутся довольно хрупкими обходными путями.
Чтобы быть точным в отношении идиома запроса / ответа, поддерживаемого моимAPI, первоначальный запрос может выглядеть следующим образом:
GET http://example.com/api/resources?<filter-params>&paging.limit=10
Ответ включает до 10 запрошенных ресурсов и курсоры, отмечающие начало и конец этой страницы:
X-Paging-Since: <since-cursor>
X-Paging-Until: <until-cursor>
[ {...}, {...}, ... ]
Предыдущая страница тогда:
GET http://example.com/api/resources?<filter-params>&paging.until=<since-cursor>
, а следующая страница:
GET http://example.com/api/resources?<filter-params>&paging.since=<until-cursor>
(Inэтот API, эти полные URL для next / prev (и first / last) на самом делеДоступно также в заголовках ответа Link : Link: <prev-url>;rel=prev, <next-url>;rel=next, <first-url>;rel=first, <last-url>;rel=last
.)
Очевидно, что мой поставщик данных может переформатировать эти заголовки в данные, возвращаемые реагирующим администраторам, как мы хотим, но не ясно, какЛучше всего подключиться к компонентам реагировать-admin List
или Pagination
или к компоненту Pagination
, чтобы передать соответствующий курсор / URL обратно поставщику данных для следующего запроса.