Легкие и простые шаги для реализации разбивки на страницы на основе GraphQL Relay-Cursor в NestJS.
Разбиение на страницы в GraphQL — довольно сложная задача. Без хорошей архитектуры это может стать довольно грязным и разочаровывающим.
В этой статье будет создан простой интерфейс для реализации разбиения на страницы GraphQL в стиле ретрансляции, который вы можете использовать в любом проекте NestJS GraphQL. Цель этого интерфейса — сделать ваш код чистым, простым и организованным.
Итак, без лишних слов, давайте приступим к делу.
Что такое спецификация соединений реле курсора
Если у кого-то из вас есть вопрос о том, что, черт возьми, такое спецификация Relay Cursor Connections и почему мы должны использовать ее при реализации разбиения на страницы GraphQL, несколько месяцев назад я написал статью, объясняющую причину. Я прикрепил статью ниже:
Подводя итог, Спецификация Relay Cursor Connections или, сокращенно, Cursor Connections Specification, предназначена для предоставления клиентам GraphQL возможности обработки передовых методов разбивки на страницы с поддержкой связанных метаданных через сервер GraphQL.
Пример разбивки на страницы GraphQL при сохранении спецификации Cursor Connections:
{ user { id name friends(first: 10, after: "opaqueCursor") { edges { cursor node { id name } } pageInfo {
startCursor endCursor hasPreviousPage hasNextPage} } } }
Выполнение
Шаг 1. Первый шаг, который нам нужно сделать, это установить graphql-relay
в наше приложение NestJS. Мы можем установить этот пакет, выполнив следующую команду в терминале:
npm install graphql-relay
Шаг 2. Создайте новый файл с именем relay.types.ts
в общей папке, желательно в общей DTO. Затем вставьте следующий код внутрь relay.types.ts
.
Шаг 3. Теперь создайте другой файл с именем connection.args.ts
в том же каталоге и вставьте следующий код:
Мы успешно настроили основной интерфейс, который мы можем использовать позже для реализации разбивки на страницы на основе спецификации Cursor Connections в нашем проекте NestJS.
Как это использовать
Поскольку мы реализовали основной интерфейс, пришло время его использовать. Давайте сначала создадим ресурс, где мы будем использовать его для разбиения на страницы.
Шаг 4. В NestJS мы можем легко создать ресурс, введя следующую команду:
nest g resource teams
Когда вас спросят: «Какой транспортный уровень вы используете?», введите второй, как показано ниже:
После этого он спросит вас: «Хотите ли вы сгенерировать точки входа CRUD? (Д/н)». Введите Y
.
Шаг 5. Давайте теперь определим сущность нашего ресурса.
Здесь я использовал Mongoose, так как я использую MongoDB в своем проекте, но он может работать с любыми конфигурациями ORM и баз данных.
Шаг 6. Давайте создадим еще один файл с именем team.response.ts
в папке DTO модуля teams
.
Шаг 7. Давайте изменим theteams.resolver.ts
для реализации разбивки на страницы GraphQL:
Шаг 8. Наконец, давайте изменим файл teams.service.ts
.
Конечный результат
После успешного изменения всех изменений мы можем увидеть следующий вывод:
Заключение
Из приведенной выше реализации мы видим, что наш преобразователь и сервисы намного чище и понятнее. Тем не менее, мы могли бы использовать всю мощь пагинации в стиле ретрансляции в нашем приложении.
Такой подход намного эффективнее. Независимо от того, насколько большим будет наше приложение, реализация разбивки на страницы будет намного проще, но и мощнее.
Ссылка
Свяжитесь со мной через Linkedin или мой веб-сайт.
Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter и LinkedIn. Посетите наш Community Discord и присоединитесь к нашему Коллективу талантов.