нам нужно перестроить серверное приложение на основе служб REST, и, поскольку у нас много вложенных уровней в службах, мы решили внедрить инновации и попробовать GraphQL.
Мы начали делать простые вещи, и проект выглядел очень многообещающе, однако мы столкнулись с реальными проблемами, такими как нумерация страниц. В REST подход к разбиению на страницы был простым, мы используем метод GET с некоторыми параметрами, такими как pageSize
и pageNumber
(или offset
), и создаем SQL-запросы для выполнения этого разбиения на страницы.
В GraphQL мы решали проблему, используя тот же подход, например, имея такой запрос:
users(size:5 offset:2) {
id
name
}
Этот подход выглядел простым в реализации, однако, копнув глубже, мы обнаружили, что «лучшим» шаблоном для его реализации является Connection, для которого запрос будет выглядеть следующим образом:
users(first:2) {
totalCount
edges {
node {
name
}
cursor
}
pageInfo {
endCursor
hasNextPage
}
}
Наши данные сохраняются в реляционной базе данных, поэтому я не вижу, как курсоры могут помочь (разве что, если я использую идентификатор автоинкремента?).
Почему этот сложный подход предпочтительнее простого? А также какой курсор и endCursor будут хранить? Я что-то неправильно понимаю в своем пути обучения?