Поставщики, подобные GitHub, начинают предоставлять свои собственные API-интерфейсы GraphQL в качестве альтернативы существующим API-интерфейсам REST. Однако многие приложения не должны напрямую разговаривать с этими API и вместо этого разговаривать с серверами сторонних производителей, которые, в свою очередь, говорят с этими API.Оберните несколько сторонних API-интерфейсов GraphQL в одной конечной точке GraphQL
С API-интерфейсом REST тривиально прокси-сервер всем сторонним API с одной конечной точки. Но существующим библиотекам GraphQL, кажется, нужно заранее знать полную схему GraphQL, и, похоже, не существует способа указать запросы или типы, которые будут определены во время выполнения.
Еще большая проблема заключается в том, что весь запрос GraphQL будет проанализирован заранее. Чтобы передать дополнительный запрос стороннему API, фрагмент GraphQL должен быть сохранен или реконструирован.
Вот пример того, что не работает:
new gql.GraphQLObjectType({
fields() {
return {
thirdPartyApiCall: {
type: '???', // Type is actually defined upstream
resolve() {
// GraphQL sub-query is already parsed at this point
return thirdPartyGraphQLApi(graphQLSubQueryGoesHere)
}
}
}
}
})
Я думаю, что часть ответа может быть использование интроспекции запросов для создания type
в этом примере динамически, один раз, когда загружается схема (хотя конечно, это означает, что он не будет отражать изменения вверх по течению, если он не будет повторно генерироваться часто), но я полностью потеряю, как получить исходный подзапрос GraphQL для передачи третьим лицам.
Является ли это в настоящее время разрешимым в GraphQL без написания собственного обработчика/обработчика GraphQL или же GraphQL в настоящее время не поддерживает такой тип делегирования (т. Е. Напрямую привязывает сторонние API-интерфейсы GraphQL)?