Как я могу определить аргументы для вложенных полей на стороне сервера с помощью grapqhl?

Как я могу определить аргументы для вложенных полей? Предположим, я хочу просмотреть все свои сообщения, но ограничить и отсортировать комментарии. Спасибо за помощь.

{
  allPosts {
    title,
    comments(limit: 5) {
      content
    }
  }
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
0
0
219
1

Ответы 1

То, что вы имеете в виду, часто обозначается как Pagination, и это то, что покрывается Спецификация GraphQL.

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

Самый простой вариант - определить строку запроса GraphQL с типом объекта, который вы хотите пересечь, во множественном числе, что означает, что ваш запрос будет выглядеть так:

{
  allPosts {
    title,
    comments {
      content
    }
  }
}

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

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

В этом случае вы должны запросить первые 5 комментариев.

{
  allPosts {
    title,
    comments(first: 5) {
      content
    }
  }
}

Но что, если вы хотите пролистать оставшуюся часть списка?

{
   allPosts {
     title,
     comments(first: 5, offset:5) {
       content
     }
   }
 }

При этом вы можете попросить следующие 5 комментариев.

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

{
  allPosts {
    title,
    comments(first: 5) {
      edges {
        node {
         content
        }
        cursor
      }
    }
  }
}

Сложная часть состоит в реализации функциональности resolvers (это немного проще с такими фреймворками, как Apollo).

Спасибо, вы мне очень ясно дали понять. Но мой главный вопрос заключается в том, как реализовать резолвер в бэкэнде, используя apollo ....

Marcos Alejandro 03.08.2018 16:18

Другие вопросы по теме