Когда мне следует использовать соединение Relay GraphQL, а когда - простой список?

В Relay GraphQL и соединения, и списки похожи на массивы, но имеют разные функции. Когда я должен использовать каждый?


person wincent    schedule 12.10.2015    source источник


Ответы (1)


Подключения

  • Более мощный и гибкий, чем простые списки.
  • Поддержка разбивки на страницы (вперед и назад) с помощью курсоров.
  • Подробная поддержка мутаций (например, RANGE_ADD, RANGE_DELETE, NODE_DELETE, как описано в руководство).
  • Требуется аргумент first или last, чтобы ограничить размер набора результатов.
  • Имеет поле edges, в котором можно найти данные для каждого края, специфичные для края.
  • Более тяжелая концепция, требующая больше работы для определения в схеме.

Списки

  • Простой и легкий.
  • Нет поддержки нумерации страниц (всегда возвращается весь список).
  • Нет специальных функций мутации для добавления, добавления и т. Д. (хотя это запрошенная функция).

Что использовать?

  • Всякий раз, когда вам нужна разбивка на страницы, вы должны использовать соединение.
  • Если вам нужен детальный контроль над мутациями, вы можете использовать соединение, даже если вам не нужна разбивка на страницы.
  • Если вам нужны все элементы в соединении, вы можете использовать first с некоторым большим числом.
  • Если вы хотите составить короткий список с минимальными усилиями, используйте простой список.
person wincent    schedule 12.10.2015
comment
Являются ли функции, связанные с подключением, в Relay на стороне клиента полностью декларативными? Я вижу, что, используя соединения, вы получаете детальную поддержку мутаций в клиенте. Существуют ли какие-либо обязательные API-интерфейсы, использующие эту функцию? Я ничего не вижу - просто хочу подтвердить, что ничего не упускаю. - person Dmitry Minkovsky; 09.11.2015
comment
Кроме того, почему списки не поддерживают разбиение на страницы? Я имею в виду, что вы могли бы создать свою собственную разбивку на страницы, используя поле типа списка, верно? - person Dmitry Minkovsky; 09.11.2015
comment
@dimadima Вы можете полностью поддерживать разбиение на страницы списками. В graph.cool мы поддерживаем как релейно-совместимую, так и простую конечную точку graphql, используя списки для вашей модели данных. Запросы списка поддерживают разбиение на страницы с помощью механизма пропуска и приема. Например, {allUsers (skip: 20, take: 10)} вернет третью страницу. Проблема с этим подходом, который адресует ретранслятор, заключается в том, что если данные добавляются между запросами страницы, страницы будут сдвинуты, и вы рискуете пропустить узел или вернуть дубликаты. Вот почему требуется курсор. - person sorenbs; 29.04.2016
comment
Где я могу увидеть пример определения и хранения данных, специфичных для ребер? - person Gershon Papi; 23.06.2016