在单个GraphQL端点

时间:2016-09-27 12:58:38

标签: api graphql graphql-js

像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)?

1 个答案:

答案 0 :(得分:1)

来自GraphQL社区的用户@jbinto Slack帮助我了解了graphql-js实施中当前未解决的GitHub问题:https://github.com/graphql/graphql-js/issues/490

目前答案似乎是"它无法完成"但是维护者正在研究它,现在GitHub创建了第一个主要的公共GraphQL API。

值得关注GitHub问题的发展,并了解讨论中出现的解决方案。驱动程序可能在将来支持此方案,或者可能会出现解决方案的用户空间解决方案。目前有很多关于具体细节的未解决的问题。