JSON, который у вас есть, является результатом запроса самоанализа .К сожалению, самоанализ не позволит вам скопировать удаленную схему.Это потому, что, хотя он и определяет, какие поля существуют в схеме, он ничего не говорит вам о том, как они должны выполняться.Например, основываясь на опубликованном вами фрагменте, мы знаем, что удаленный сервер предоставляет запрос _meta
, который возвращает тип Meta
, но мы не знаем, какой код нужно выполнить для разрешения значения, возвращаемого запросом.
Технически, можно передать результаты запроса на самоанализ в buildClientSchema
из модуля graphql/utilities
.Однако схема не будет исполняемой, как указывают документы:
Учитывая результат, когда клиент выполняет запрос самоанализа, создает и возвращает экземпляр GraphQLSchema, который затем можно использовать со всеми GraphQL.js, но не могут использоваться для выполнения запроса, так как самоанализ не представляет функции «resolver», «parse» или «serialize» или любые другие внутренние механизмы сервера.
Если вы хотитечтобы создать прокси для другой конечной точки GraphQL, проще всего использовать makeRemoteExecutableSchema
из graphql-tools
.
Вот пример, основанный на документах :
import { HttpLink } from 'apollo-link-http';
import fetch from 'node-fetch';
const link = new HttpLink({ uri: 'http://your-endpoint-url/graphql', fetch });
async function getRemoteSchema () {
const schema = await introspectSchema(link);
return makeRemoteExecutableSchema({
schema,
link,
});
}
Полученная схема представляет собой GraphQLSchema
объект, который можно использовать как обычно:
import { GraphQLServer } from 'graphql-yoga'
async function startServer () {
const schema = await introspectSchema(link);
const executableSchema = makeRemoteExecutableSchema({
schema,
link,
});
const server = new GraphQLServer({ schema: executableSchema })
server.start()
}
startServer()
graphql-tools
также позволяет сшивать схемы вместе , если вы не только хотели использовать проксисуществующей конечной точки, но хотел бы добавить и к ней.