Схема GitHub GraphQL является Реле-совместимой .С их домашней страницы:
Relay - это инфраструктура JavaScript для создания управляемых данными приложений React на основе GraphQL, разработанная с нуля, чтобы быть простой в использовании, расширяемой и, прежде всего, производительной.
Хотя Relay является клиентом внешнего интерфейса, он требует, чтобы схемы включали в себя определенные функции, чтобы клиент мог работать должным образом.Одной из этих функций является Глобальная идентификация объекта .Как вы предоставляете уникальный глобальный идентификатор, остается на усмотрение сервера.Однако Relay предоставляет вспомогательную библиотеку на стороне сервера, которая имеет встроенный механизм:
export function toGlobalId(type: string, id: string): string {
return base64([type, id].join(':'));
}
export function fromGlobalId(globalId: string): ResolvedGlobalId {
const unbasedGlobalId = unbase64(globalId);
const delimiterPos = unbasedGlobalId.indexOf(':');
return {
type: unbasedGlobalId.substring(0, delimiterPos),
id: unbasedGlobalId.substring(delimiterPos + 1),
};
}
Все, что это делает, - это объединение идентификатора и типа GraphQL, а затем кодирование его с использованием Base64.Пока вы не возвращаете строки из разных таблиц одного и того же типа, это гарантированно будет уникальным.
Так работает API GitHub.Однако не все API-интерфейсы GraphQL совместимы с Relay.Таким образом, есть и преимущества, и затраты на разработку схемы.Чтобы ответить на ваш вопрос более прямо, то, как поле разрешается, полностью зависит от сервера.Средство распознавания, которое вы пишете для определенного поля (включая мутации корневого уровня), передается в виде пары частей информации:
- значение, которое родительское поле разрешило в
- аргументы дляполе
Большинство реализаций также предоставляют некоторый объект context
и объект info
, который описывает сам запрос GraphQL, хотя это не является строго частью спецификации.Дело в том, что это все, что распознаватель действительно «знает».Однако, поскольку вы пишете распознаватель, вы знаете, какие данные необходимо запрашивать или обрабатывать, исходя из поля, для которого вы пишете преобразователь.