2016-09-27 73 views
1

像GitHub这样的供应商开始提供自己的GraphQL API作为现有REST API的替代方案。然而,许多应用程序不应该直接与这些API交谈,而应该与第一方服务器进行交谈,然后再与这些API交谈。将多个第三方GraphQL API包装在单个GraphQL端点中

使用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 APIs)吗?

回答

0

用户@jbinto从GraphQL社区松弛有益指出我在这个目前尚未解决的问题的GitHub上graphql-js实现:https://github.com/graphql/graphql-js/issues/490

目前的答案似乎是“它不能这样做”,但维护人员正在研究现在,GitHub创建了第一个主要的公共GraphQL API。

值得关注GitHub上这个问题的发展,看看讨论中出现了什么解决方案。未来驱动程序可能会支持这种情况,或者可能会出现一个解决此问题的用户级解决方案。关于目前的具体情况,有很多悬而未决的问题。