2016-09-27 2 views
1

Поставщики, подобные 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)?

ответ

0

Пользователь @jbinto из сообщества Слэка GraphQL услужливо указал мне на этот вопрос в настоящее время нерешенной GitHub на graphql-js реализации: https://github.com/graphql/graphql-js/issues/490

В настоящее время ответ, кажется, «это не может быть сделано», но Сопровождающие смотрит в теперь, когда GitHub создал первый крупный публичный API GraphQL.

Стоит следить за развитием проблемы на GitHub и видеть, какие решения возникают из обсуждения. Водитель может поддержать этот сценарий в будущем, или может возникнуть решение пользовательской лицензии, которое решает его. В настоящее время существует множество открытых вопросов относительно специфики.

 Смежные вопросы

  • Нет связанных вопросов^_^