когда использовать globalIdField

Насколько я могу судить, реле использует nodeDefitions для запросов, когда переменные изменяются.

Казалось бы, все объекты с полем id должны быть действительным узлом. Однако, если у меня есть такие данные:

type User {
  id: globalIdField('User'),
  name: String,
  folders: [ Folder ]
}
type Folder {
  id: ???,
  ...
}

Данные хранятся в решении на основе документов, а объекты «Папка» вложены в объект «Пользователь». Но объектам папки присваивается идентификатор, чтобы некоторые другие объекты могли ссылаться на объекты папки в контексте пользователя.

Если Folder реализует nodeInterface и использует globalIdField, то мне нужно найти способ получить объект Folder из globalId, а это означает, что мне, возможно, придется сканировать всех пользователей, чтобы найти его, иметь карту данных, которая позволит мне найти объект или нормализовать данные, чтобы папки находились в своей собственной таблице. Если он не реализует nodeInterface и просто использует строки в качестве поля идентификатора, что произойдет, когда я попытаюсь изменить некоторые поля в объекте «Папка»?


person user1600124    schedule 21.09.2015    source источник


Ответы (1)


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

Одним из способов создания глобального идентификатора для папки может быть использование префикса и добавление идентификатора пользователя и способа идентификации папки внутри пользователя, например:

var folderID = ['folder', userID, folderID].join(':');

Всякий раз, когда вы хотите разрешить этот идентификатор на своем сервере, вы разделяете его на :, видите, что хотите загрузить папку, просматривая первую часть, а затем переходите через пользователя в нужную папку.

person kassens    schedule 21.09.2015