Как получить полную схему GraphQL с конечной точки сервера Apollo? - PullRequest
0 голосов
/ 28 февраля 2020

Я пишу интерфейс GraphQL между сервисами GraphQL и REST с использованием Apollo Server. Этот интерфейс обеспечит единственную конечную точку GraphQL для клиентского интерфейса Apollo.

В настоящее время единственным сервисом является приложение Keystone JS, которое предоставляет конечную точку GraphQL через (насколько мне известно) сервер Apollo. Для простоты на данный момент я загружаю схему GraphQL с серверной площадки GraphQL JS сервера KeyQL и использую ее в качестве схемы GraphQL моего интерфейса (после удаления определений, которые генерирует Keystone, а Apollo Server не понимает).

Я бы хотел автоматизировать этот процесс - то есть как-то «схватить» схему GraphQL, которую генерирует KeystoneJS / Apollo Server, так же, как если бы я загружал ее с GraphQL Playground. Есть ли способ сделать это с конечной точки? (Я не хочу трогать внутренности Keystone JS, просто получить доступ к схеме через конечную точку)

1 Ответ

1 голос
/ 02 марта 2020

Вы можете выполнить запрос самоанализа для любого сервиса GraphQL (при условии, что они не отключили самоанализ - некоторые сервисы делают это в производственной среде). Результат этого запроса может быть передан в buildClientSchema, чтобы восстановить схему из результата самоанализа (естественно, без какого-либо логического разрешения поля c). Затем вы можете преобразовать возвращенный объект GraphQLSchema в SDL, вызвав printSchema.

Вот пример использования ax ios, но вы можете использовать любую http-библиотеку, которая вам нравится, для выполнения запроса:

const { buildClientSchema, getIntrospectionQuery, printSchema } = require('graphql')
const res = await axios.post(ENDPOINT_URL, { query: getIntrospectionQuery() })
const schema = buildClientSchema(res.data.data)
const sdl = printSchema(schema)
console.log(sdl)

Примечание: первые «данные» - это то, что API-интерфейс ax ios называет фактическим JSON ответом от сервера, а вторые «данные» - это фактическое свойство «данных», которое мы и хотим перейти на buildClientSchema.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...