В Relay какую роль играют интерфейс узла и спецификация глобального идентификатора?

Я начал сrelay-starter-kit а также работал в документации по Relay и GraphQL. Но есть немало необъяснимых и загадочных областей.

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

Для чего это? Я ставлю логирование, но оно вообще никогда не вызывается:

var {nodeInterface, nodeField} = nodeDefinitions(
  (globalId) => {
    var {type, id} = fromGlobalId(globalId);
    if (type === 'User') {
      return getUser(id);
    } else if (type === 'Widget') {
      return getWidget(id);
    } else {
      return null;
    }
  },
  (obj) => {
    if (obj instanceof User) {
      return userType;
    } else if (obj instanceof Widget) {
      return widgetType;
    } else {
      return null;
    }
  }
);

И каков реальный эффект этого:

interfaces: [nodeInterface],

Может быть связано с тем, чтоnode поле здесь делаю:

var queryType = new GraphQLObjectType({
  name: 'Query',
  fields: () => ({
    node: nodeField,
    // Add your own root fields here
    viewer: {
      type: userType,
      resolve: () => getViewer(),
    },
  }),
});

И что за магия во всемid поле? Что такоеglobalIdField за?

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

Вместо:

id: globalIdField('User'),

Я хочу использовать свой идентификатор базы данных:

id: {
  type: GraphQLID,
  description: 'The identifier'
},

Но если я это сделаю, в браузере появится сообщение об ошибкеRelayQueryWriter: Could not find a type name for record '1'.

Я могу избавиться от этой ошибки, добавив__typename к моим компонентным контейнерам Relay Query, но это кажется неправильным.

Было бы здорово, если бы вы могли дать более глубокие подробности и более подробное объяснение здесь и улучшить официальную документацию.

Спасибо

Ответы на вопрос(1)

Ваш ответ на вопрос