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