像GitHub这样的供应商开始提供自己的GraphQL API作为现有REST API的替代品。但是,许多应用程序不应该直接与这些API通信,而是与第一方服务器通信,后者又与这些API通信。
使用REST API,从单个端点代理整个第三方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目前不支持这种委托(即直接包装第三方GraphQL API)?
答案 0 :(得分:1)
来自GraphQL社区的用户@jbinto
Slack帮助我了解了graphql-js
实施中当前未解决的GitHub问题:https://github.com/graphql/graphql-js/issues/490
目前答案似乎是"它无法完成"但是维护者正在研究它,现在GitHub创建了第一个主要的公共GraphQL API。
值得关注GitHub问题的发展,并了解讨论中出现的解决方案。驱动程序可能在将来支持此方案,或者可能会出现解决方案的用户空间解决方案。目前有很多关于具体细节的未解决的问题。